Skip to content

Commit

Permalink
feature(UI):[TRACEFOSS-604] refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
ds-mmaul committed Nov 27, 2023
1 parent 5f9be44 commit 87730c2
Show file tree
Hide file tree
Showing 13 changed files with 53 additions and 329 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import { DashboardStats } from '../model/dashboard.model';

@Injectable()
export class DashboardFacade {
private assetNumbersSubscription: Subscription;
private dashboardStatsSubscription: Subscription;
private investigationsReceivedSubscription: Subscription;
private investigationsCreatedSubscription: Subscription;
private alertsReceivedSubscription: Subscription;
Expand All @@ -48,18 +48,6 @@ export class DashboardFacade {
public get dashboardStats$(): Observable<View<DashboardStats>> {
return this.dashboardState.dashboardStats$;
}
public get numberOfTotalMyParts$(): Observable<View<number>> {
return this.dashboardState.numberOfTotalMyParts$;
}

public get numberOfTotalOtherParts$(): Observable<View<number>> {
return this.dashboardState.numberOfTotalOtherParts$;
}


public get numberOfMyPartsWithOpenInvestigations$(): Observable<View<number>> {
return this.dashboardState.numberOfMyPartsWithOpenInvestigations$;
}

public get recentReceivedInvestigations$(): Observable<View<Notifications>> {
return this.dashboardState.recentReceivedInvestigations$;
Expand All @@ -77,90 +65,31 @@ export class DashboardFacade {
return this.dashboardState.recentCreatedAlerts$;
}

public get numberOfOwnOpenInvestigationsReceived$(): Observable<View<number>> {
return this.dashboardState.numberOfOwnOpenInvestigationsReceived$;
}
public get numberOfOwnOpenInvestigationsCreated$(): Observable<View<number>> {
return this.dashboardState.numberOfOwnOpenInvestigationsCreated$;
}
public get numberOfOwnOpenAlertsReceived$(): Observable<View<number>> {
return this.dashboardState.numberOfOwnOpenAlertsReceived$;
}
public get numberOfOwnOpenAlertsCreated$(): Observable<View<number>> {
return this.dashboardState.numberOfOwnOpenAlertsCreated$;
}

public setDashboardData(): void {
this.setAssetNumbers();
this.setDashboardMetricData();
this.setReceivedInvestigations();
this.setCreatedInvestigations();
this.setReceivedAlerts();
this.setCreatedAlerts();
}

private setAssetNumbers(): void {
this.dashboardState.setNumberOfTotalMyParts({ loader: true });
this.dashboardState.setNumberOfTotalOtherParts({loader: true});

this.dashboardState.setNumberOfAsBuiltOwnParts({loader: true});
this.dashboardState.setNumberOfAsPlannedOwnParts({loader: true});
this.dashboardState.setNumberOfAsBuiltSupplierParts({loader: true});
this.dashboardState.setNumberOfAsPlannedSupplierParts({loader: true});
this.dashboardState.setNumberOfAsBuiltCustomerParts({loader: true});
this.dashboardState.setNumberOfAsPlannedCustomerParts({loader: true});

this.dashboardState.setNumberOfOwnOpenInvestigationsReceived({loader:true})
this.dashboardState.setNumberOfOwnOpenAlertsReceived({loader:true})
this.dashboardState.setNumberOfOwnOpenInvestigationsCreated({loader:true})
this.dashboardState.setNumberOfOwnOpenAlertsCreated({loader:true})

private setDashboardMetricData(): void {
this.dashboardState.setDashboardStats({loader: true})

this.assetNumbersSubscription?.unsubscribe();
this.assetNumbersSubscription = this.dashboardService.getStats().subscribe({
this.dashboardStatsSubscription?.unsubscribe();
this.dashboardStatsSubscription = this.dashboardService.getStats().subscribe({
next: (dashboardStats: DashboardStats) => {
this.dashboardState.setNumberOfTotalMyParts({ data: dashboardStats.totalOwnParts });
this.dashboardState.setNumberOfTotalOtherParts({data: dashboardStats.totalOtherParts});

this.dashboardState.setNumberOfAsBuiltOwnParts({data: dashboardStats.asBuiltOwnParts});
this.dashboardState.setNumberOfAsPlannedOwnParts({data: dashboardStats.asPlannedOwnParts});
this.dashboardState.setNumberOfAsBuiltSupplierParts({data: dashboardStats.asBuiltSupplierParts});
this.dashboardState.setNumberOfAsPlannedSupplierParts({data: dashboardStats.asPlannedSupplierParts});
this.dashboardState.setNumberOfAsBuiltCustomerParts({data: dashboardStats.asBuiltCustomerParts});
this.dashboardState.setNumberOfAsPlannedCustomerParts({data: dashboardStats.asPlannedCustomerParts});

this.dashboardState.setNumberOfOwnOpenInvestigationsReceived({data: dashboardStats.ownOpenInvestigationsReceived})
this.dashboardState.setNumberOfOwnOpenAlertsReceived({data: dashboardStats.ownOpenAlertsReceived})
this.dashboardState.setNumberOfOwnOpenInvestigationsCreated({data: dashboardStats.ownOpenInvestigationsCreated})
this.dashboardState.setNumberOfOwnOpenAlertsCreated({data: dashboardStats.ownOpenAlertsCreated})
this.dashboardState.setDashboardStats({data: dashboardStats})

},
error: error => {
this.dashboardState.setNumberOfTotalMyParts({ error });
this.dashboardState.setNumberOfTotalOtherParts({error});

this.dashboardState.setNumberOfAsBuiltOwnParts({error});
this.dashboardState.setNumberOfAsPlannedOwnParts({error});
this.dashboardState.setNumberOfAsBuiltSupplierParts({error});
this.dashboardState.setNumberOfAsPlannedSupplierParts({error});
this.dashboardState.setNumberOfAsBuiltCustomerParts({error});
this.dashboardState.setNumberOfAsPlannedCustomerParts({error});

this.dashboardState.setNumberOfMyPartsWithOpenInvestigations({error});
this.dashboardState.setNumberOfMyPartsWithOpenAlerts({error});
this.dashboardState.setNumberOfOtherPartsWithOpenInvestigations({error});
this.dashboardState.setNumberOfOtherPartsWithOpenAlerts({error});

this.dashboardState.setNumberOfOwnOpenInvestigationsReceived({error})
this.dashboardState.setNumberOfOwnOpenAlertsReceived({error})
this.dashboardState.setNumberOfOwnOpenInvestigationsCreated({error})
this.dashboardState.setNumberOfOwnOpenAlertsCreated({error})
this.dashboardState.setDashboardStats({error})
},
});
}

public stopDataLoading(): void {
this.assetNumbersSubscription?.unsubscribe();
this.dashboardStatsSubscription?.unsubscribe();
this.investigationsReceivedSubscription?.unsubscribe();
this.investigationsCreatedSubscription?.unsubscribe();
this.alertsReceivedSubscription?.unsubscribe();
Expand Down
177 changes: 6 additions & 171 deletions frontend/src/app/modules/page/dashboard/core/dashboard.state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,40 +19,17 @@
* SPDX-License-Identifier: Apache-2.0
********************************************************************************/

import {Injectable} from '@angular/core';
import { Injectable } from '@angular/core';
import { DashboardStats } from '@page/dashboard/model/dashboard.model';

import {Notifications} from '@shared/model/notification.model';
import {State} from '@shared/model/state';
import {Observable} from 'rxjs';
import {View} from 'src/app/modules/shared/model/view.model';
import {DashboardStats} from "@page/dashboard/model/dashboard.model";
import { Notifications } from '@shared/model/notification.model';
import { State } from '@shared/model/state';
import { Observable } from 'rxjs';
import { View } from 'src/app/modules/shared/model/view.model';

@Injectable()
export class DashboardState {

// part counts
private readonly _numberOfAsBuiltOwnParts$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfAsPlannedOwnParts$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfAsBuiltSupplierParts$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfAsPlannedSupplierParts$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfAsBuiltCustomerParts$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfAsPlannedCustomerParts$: State<View<number>> = new State<View<number>>({ loader: true });

// calculated part counts
private readonly _numberOfTotalMyParts$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfTotalOtherParts$: State<View<number>> = new State<View<number>>({ loader: true });

// notification counts
private readonly _numberOfMyPartsWithOpenAlerts$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfMyPartsWithOpenInvestigations$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfOtherPartsWithOpenAlerts$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfOtherPartsWithOpenInvestigations$: State<View<number>> = new State<View<number>>({ loader: true });

// calculated notification counts
private readonly _numberOfOwnOpenInvestigationsReceived$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfOwnOpenInvestigationsCreated$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfOwnOpenAlertsReceived$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _numberOfOwnOpenAlertsCreated$: State<View<number>> = new State<View<number>>({ loader: true });
private readonly _dashboardStats$: State<View<DashboardStats>> = new State<View<DashboardStats>>({ loader: true });

// recent notifications
Expand All @@ -62,148 +39,6 @@ export class DashboardState {
private readonly _recentReceivedAlerts$: State<View<Notifications>> = new State<View<Notifications>>({ loader: true });
private readonly _recentCreatedAlerts$: State<View<Notifications>> = new State<View<Notifications>>({ loader: true });

/**
* part counts getter/setter
*/

public get numberOfAsBuiltOwnParts$(): Observable<View<number>> {
return this._numberOfAsBuiltOwnParts$.observable;
}

public setNumberOfAsBuiltOwnParts(count: View<number>): void {
this._numberOfAsBuiltOwnParts$.update(count);
}

public get numberOfAsPlannedOwnParts$(): Observable<View<number>> {
return this._numberOfAsPlannedOwnParts$.observable;
}

public setNumberOfAsPlannedOwnParts(count: View<number>): void {
this._numberOfAsPlannedOwnParts$.update(count);
}

public get numberOfAsBuiltSupplierParts$(): Observable<View<number>> {
return this._numberOfAsBuiltSupplierParts$.observable;
}

public setNumberOfAsBuiltSupplierParts(count: View<number>): void {
this._numberOfAsBuiltSupplierParts$.update(count);
}

public get numberOfAsPlannedSupplierParts$(): Observable<View<number>> {
return this._numberOfAsPlannedSupplierParts$.observable;
}

public setNumberOfAsPlannedSupplierParts(count: View<number>): void {
this._numberOfAsPlannedSupplierParts$.update(count);
}

public get numberOfAsBuiltCustomerParts$(): Observable<View<number>> {
return this._numberOfAsBuiltCustomerParts$.observable;
}

public setNumberOfAsBuiltCustomerParts(count: View<number>): void {
this._numberOfAsBuiltCustomerParts$.update(count);
}

public get numberOfAsPlannedCustomerParts$(): Observable<View<number>> {
return this._numberOfAsPlannedCustomerParts$.observable;
}

public setNumberOfAsPlannedCustomerParts(count: View<number>): void {
this._numberOfAsPlannedCustomerParts$.update(count);
}

public get numberOfTotalMyParts$(): Observable<View<number>> {
return this._numberOfTotalMyParts$.observable;
}

public setNumberOfTotalMyParts(count: View<number>): void {
this._numberOfTotalMyParts$.update(count);
}

public get numberOfTotalOtherParts$(): Observable<View<number>> {
return this._numberOfTotalOtherParts$.observable;
}

public setNumberOfTotalOtherParts(count: View<number>): void {
this._numberOfTotalOtherParts$.update(count);
}


/**
* part notifications getter/setter
*/


public get numberOfMyPartsWithOpenAlerts$(): Observable<View<number>> {
return this._numberOfMyPartsWithOpenAlerts$.observable;
}

public setNumberOfMyPartsWithOpenAlerts(count: View<number>): void {
this._numberOfMyPartsWithOpenAlerts$.update(count);
}

public get numberOfMyPartsWithOpenInvestigations$(): Observable<View<number>> {
return this._numberOfMyPartsWithOpenInvestigations$.observable;
}

public setNumberOfMyPartsWithOpenInvestigations(count: View<number>): void {
this._numberOfMyPartsWithOpenInvestigations$.update(count);
}

public get numberOfOtherPartsWithOpenAlerts$(): Observable<View<number>> {
return this._numberOfOtherPartsWithOpenAlerts$.observable;
}

public setNumberOfOtherPartsWithOpenAlerts(count: View<number>): void {
this._numberOfOtherPartsWithOpenAlerts$.update(count);
}

public get numberOfOtherPartsWithOpenInvestigations$(): Observable<View<number>> {
return this._numberOfOtherPartsWithOpenInvestigations$.observable;
}

public setNumberOfOtherPartsWithOpenInvestigations(count: View<number>): void {
this._numberOfOtherPartsWithOpenInvestigations$.update(count);
}

/**
* calculated notifications getter/setter
*/

public get numberOfOwnOpenInvestigationsReceived$(): Observable<View<number>> {
return this._numberOfOwnOpenInvestigationsReceived$.observable;
}

public setNumberOfOwnOpenInvestigationsReceived(count: View<number>): void {
this._numberOfOwnOpenInvestigationsReceived$.update(count);
}

public get numberOfOwnOpenInvestigationsCreated$(): Observable<View<number>> {
return this._numberOfOwnOpenInvestigationsCreated$.observable;
}

public setNumberOfOwnOpenInvestigationsCreated(count: View<number>): void {
this._numberOfOwnOpenInvestigationsCreated$.update(count);
}

public get numberOfOwnOpenAlertsReceived$(): Observable<View<number>> {
return this._numberOfOwnOpenAlertsReceived$.observable;
}

public setNumberOfOwnOpenAlertsReceived(count: View<number>): void {
this._numberOfOwnOpenAlertsReceived$.update(count);
}

public get numberOfOwnOpenAlertsCreated$(): Observable<View<number>> {
return this._numberOfOwnOpenAlertsCreated$.observable;
}

public setNumberOfOwnOpenAlertsCreated(count: View<number>): void {
this._numberOfOwnOpenAlertsCreated$.update(count);
}

public setDashboardStats(dashboardStatus: View<DashboardStats>): void {
this._dashboardStats$.update(dashboardStatus);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { PartsModule } from '@page/parts/parts.module';
import { SharedModule } from '@shared/shared.module';
import { screen, waitFor } from '@testing-library/angular';
import { renderComponent } from '@tests/test-render.utils';
import { of } from 'rxjs';
import { DashboardModule } from '../dashboard.module';
import { DashboardComponent } from './dashboard.component';

Expand All @@ -35,14 +36,13 @@ describe('Dashboard', () => {
});

it('should render total of parts', async () => {
await renderDashboard();
const {fixture} = await renderDashboard();
const {componentInstance } = fixture;

componentInstance.partsMetricData = [{metricUnit: 'parts', value: of(3), metricName: 'parts'}]

expect(await waitFor(() => screen.getByText('3'))).toBeInTheDocument();

expect(screen.getByText('pageDashboard.totalOfParts.label')).toHaveAttribute(
'id',
screen.getByText('3').getAttribute('aria-describedby'),
);
});

it('should render supervisor section when supervisor user', async () => {
Expand All @@ -63,14 +63,12 @@ describe('Dashboard', () => {

describe('investigations', () => {
it('should render count for investigations', async () => {
await renderDashboard();
const {fixture} = await renderDashboard();
const {componentInstance } = fixture;

expect(await waitFor(() => screen.getByText('20'))).toBeInTheDocument();
componentInstance.partsMetricData = [{metricUnit: 'investigations', value: of(20), metricName: 'investigations'}]

expect(screen.getByText('pageDashboard.totalInvestigations.label')).toHaveAttribute(
'id',
screen.getByText('20').getAttribute('aria-describedby'),
);
expect(await waitFor(() => screen.getByText('20'))).toBeInTheDocument();
});
});
});
Loading

0 comments on commit 87730c2

Please sign in to comment.