Skip to content

Commit a4f0b47

Browse files
committed
refactor: centralize logic in service
1 parent 1722de1 commit a4f0b47

File tree

8 files changed

+114
-41
lines changed

8 files changed

+114
-41
lines changed

src/app/ubs/ubs-admin/components/ubs-admin-export-details/ubs-admin-export-details.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="container mb-3">
22
<div class="form" [formGroup]="exportDetailsDto">
33
<div class="empty_card" (click)="openDetails()">
4-
<img [src]="getArrowImageSrc()" alt="arrow" />
4+
<img [src]="loadArrowImage().imgUrl" [alt]="loadArrowImage().imgAlt" />
55
<h1 class="form__headline">{{ 'export-details.title' | translate }}</h1>
66
<div *ngIf="isFormRequired" class="alert-message">{{ 'export-details.alert-message' | translate }}</div>
77
</div>

src/app/ubs/ubs-admin/components/ubs-admin-export-details/ubs-admin-export-details.component.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ describe('UbsAdminExportDetailsComponent', () => {
105105

106106
it('should return true when pageOpen is false, exportDetailsDto is invalid and orderStatus is not cancel or done', () => {
107107
component.pageOpen = false;
108-
component.uneditableStatus = false;
108+
component.isUneditableStatus = false;
109109
expect(component.isFormRequired).toBeFalsy();
110110
});
111111
});

src/app/ubs/ubs-admin/components/ubs-admin-export-details/ubs-admin-export-details.component.ts

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export class UbsAdminExportDetailsComponent implements OnInit, OnDestroy, OnChan
2929
currentHour: string;
3030
allReceivingStations: string[];
3131
currentDate: string;
32-
uneditableStatus = false;
32+
isUneditableStatus = false;
3333
resetFieldImg = './assets/img/ubs-tariff/bigClose.svg';
3434
private readonly statuses = [OrderStatus.BROUGHT_IT_HIMSELF, OrderStatus.CANCELED];
3535

@@ -62,7 +62,7 @@ export class UbsAdminExportDetailsComponent implements OnInit, OnDestroy, OnChan
6262
this.orderStatus === OrderStatus.DONE ||
6363
this.orderStatus === OrderStatus.BROUGHT_IT_HIMSELF
6464
) {
65-
this.uneditableStatus = true;
65+
this.isUneditableStatus = true;
6666
}
6767

6868
this.cdr.detectChanges();
@@ -74,6 +74,10 @@ export class UbsAdminExportDetailsComponent implements OnInit, OnDestroy, OnChan
7474
this.currentDate = new Date().toISOString().split('T')[0];
7575
}
7676

77+
loadArrowImage() {
78+
return this.orderService.getArrowImageSrc(this.isFormRequired, this.pageOpen, this.exportDetailsDto.valid, this.isUneditableStatus);
79+
}
80+
7781
resetValue(): void {
7882
this.exportDetailsDto.get('receivingStationId').setValue(null);
7983
}
@@ -83,7 +87,7 @@ export class UbsAdminExportDetailsComponent implements OnInit, OnDestroy, OnChan
8387
}
8488

8589
get isFormRequired(): boolean {
86-
return !this.pageOpen && !this.exportDetailsDto.valid && !this.uneditableStatus;
90+
return !this.pageOpen && !this.exportDetailsDto.valid && !this.isUneditableStatus;
8791
}
8892

8993
showTimePickerClick(): void {
@@ -121,19 +125,6 @@ export class UbsAdminExportDetailsComponent implements OnInit, OnDestroy, OnChan
121125
return this.exportDetailsDto.get('timeDeliveryFrom').invalid || this.exportDetailsDto.get('timeDeliveryTo').invalid;
122126
}
123127

124-
getArrowImageSrc(): string {
125-
if (this.isFormRequired) {
126-
return 'assets/img/ubs-admin-orders/red_arrow_up.svg';
127-
} else if (!this.pageOpen && (this.exportDetailsDto.valid || this.uneditableStatus)) {
128-
return 'assets/img/ubs-admin-orders/arrow_up.svg';
129-
} else if (this.pageOpen && (this.exportDetailsDto.valid || this.uneditableStatus)) {
130-
return 'assets/img/ubs-admin-orders/arrow_down.svg';
131-
} else if (this.pageOpen && !this.exportDetailsDto.valid && !this.uneditableStatus) {
132-
return 'assets/img/ubs-admin-orders/red_arrow_down.svg';
133-
}
134-
return '';
135-
}
136-
137128
ngOnDestroy(): void {
138129
this.destroy$.next(true);
139130
this.destroy$.complete();

src/app/ubs/ubs-admin/components/ubs-admin-responsible-persons/ubs-admin-responsible-persons.component.html

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,6 @@
11
<div class="container" [formGroup]="responsiblePersonsForm">
22
<div class="empty_card" (click)="openDetails()">
3-
<img
4-
*ngIf="!pageOpen && (responsiblePersonsForm.valid || uneditableStatus)"
5-
src="assets/img/ubs-admin-orders/arrow_up.svg"
6-
alt="arrow up"
7-
/>
8-
<img
9-
*ngIf="pageOpen && (responsiblePersonsForm.valid || uneditableStatus)"
10-
src="assets/img/ubs-admin-orders/arrow_down.svg"
11-
alt="arrow down"
12-
/>
13-
<img
14-
*ngIf="pageOpen && !responsiblePersonsForm.valid && !uneditableStatus"
15-
src="assets/img/ubs-admin-orders/red_arrow_down.svg"
16-
alt="arrow down"
17-
/>
18-
<img *ngIf="isFormRequired()" src="assets/img/ubs-admin-orders/red_arrow_up.svg" alt="arrow up" />
19-
3+
<img [src]="loadArrowImage().imgUrl" [alt]="loadArrowImage().imgAlt" />
204
<h1 class="form__headline">{{ 'responsible-persons.title' | translate }}</h1>
215
<div *ngIf="isFormRequired()" class="alert-message">{{ 'responsible-persons.alert-message' | translate }}</div>
226
</div>

src/app/ubs/ubs-admin/components/ubs-admin-responsible-persons/ubs-admin-responsible-persons.component.spec.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { TranslateModule } from '@ngx-translate/core';
33
import { ReactiveFormsModule, Validators, FormBuilder } from '@angular/forms';
44

55
import { UbsAdminResponsiblePersonsComponent } from './ubs-admin-responsible-persons.component';
6+
import { HttpClient, HttpClientModule } from '@angular/common/http';
67

78
describe('UbsAdminResponsiblePersonsComponent', () => {
89
let component: UbsAdminResponsiblePersonsComponent;
@@ -17,7 +18,8 @@ describe('UbsAdminResponsiblePersonsComponent', () => {
1718
beforeEach(waitForAsync(() => {
1819
TestBed.configureTestingModule({
1920
declarations: [UbsAdminResponsiblePersonsComponent],
20-
imports: [TranslateModule.forRoot(), ReactiveFormsModule]
21+
imports: [TranslateModule.forRoot(), ReactiveFormsModule, HttpClientModule],
22+
providers: [HttpClient]
2123
}).compileComponents();
2224
}));
2325

@@ -70,7 +72,7 @@ describe('UbsAdminResponsiblePersonsComponent', () => {
7072

7173
it('should return true when pageOpen is false, responsiblePersonInfo is invalid and orderStatus is not cancel or done', () => {
7274
component.pageOpen = false;
73-
component.uneditableStatus = false;
75+
component.isUneditableStatus = false;
7476
expect(component.isFormRequired()).toBeFalsy();
7577
});
7678

src/app/ubs/ubs-admin/components/ubs-admin-responsible-persons/ubs-admin-responsible-persons.component.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { FormGroup, Validators } from '@angular/forms';
33
import { Subject } from 'rxjs';
44
import { IEmployee, IResponsiblePersons, IResponsiblePersonsData } from 'src/app/ubs/ubs-admin/models/ubs-admin.interface';
55
import { OrderStatus } from 'src/app/ubs/ubs/order-status.enum';
6-
6+
import { OrderService } from '../../services/order.service';
77
@Component({
88
selector: 'app-ubs-admin-responsible-persons',
99
templateUrl: './ubs-admin-responsible-persons.component.html',
@@ -19,18 +19,20 @@ export class UbsAdminResponsiblePersonsComponent implements OnInit, OnDestroy, O
1919
allLogisticians: string[];
2020
allNavigators: string[];
2121
allDrivers: string[];
22-
uneditableStatus = false;
22+
isUneditableStatus = false;
2323
pageOpen: boolean;
2424
responsiblePersonsData: IResponsiblePersonsData[];
2525
private destroy$: Subject<boolean> = new Subject<boolean>();
2626

27+
constructor(public orderService: OrderService) {}
28+
2729
ngOnChanges(changes: SimpleChanges): void {
2830
if (
2931
changes.orderStatus?.currentValue === OrderStatus.CANCELED ||
3032
changes.orderStatus?.currentValue === OrderStatus.DONE ||
3133
changes.orderStatus?.currentValue === OrderStatus.BROUGHT_IT_HIMSELF
3234
) {
33-
this.uneditableStatus = true;
35+
this.isUneditableStatus = true;
3436
}
3537
}
3638

@@ -42,6 +44,15 @@ export class UbsAdminResponsiblePersonsComponent implements OnInit, OnDestroy, O
4244
this.pageOpen = !this.pageOpen;
4345
}
4446

47+
loadArrowImage() {
48+
return this.orderService.getArrowImageSrc(
49+
this.isFormRequired(),
50+
this.pageOpen,
51+
this.responsiblePersonsForm.valid,
52+
this.isUneditableStatus
53+
);
54+
}
55+
4556
setEmployeesByPosition() {
4657
const employees = this.responsiblePersonInfo.allPositionsEmployees;
4758
this.allCallManagers = this.getEmployeesById(employees, 2);
@@ -54,7 +65,7 @@ export class UbsAdminResponsiblePersonsComponent implements OnInit, OnDestroy, O
5465
isFormRequired(): boolean {
5566
const isNotOpen = !this.pageOpen;
5667
const isNotValid = !this.responsiblePersonsForm.valid;
57-
const isUneditable = !this.uneditableStatus;
68+
const isUneditable = !this.isUneditableStatus;
5869

5970
return isNotOpen && isNotValid && isUneditable;
6071
}

src/app/ubs/ubs-admin/services/order.service.spec.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,56 @@ describe('OrderService', () => {
410410
const res = service.getAvailableOrderStatuses(OrderStatus.CANCELED, arr);
411411
expect(res).toEqual([{ key: OrderStatus.CANCELED }]);
412412
});
413+
414+
it('should return red arrow up when form is required', () => {
415+
const result = service.getArrowImageSrc(true, false, false, false);
416+
expect(result).toEqual({
417+
imgUrl: 'assets/img/ubs-admin-orders/red_arrow_up.svg',
418+
imgAlt: 'Red arrow pointing up'
419+
});
420+
});
421+
422+
it('should return arrow up when page is not open and valid or uneditable', () => {
423+
const result = service.getArrowImageSrc(false, false, true, false);
424+
expect(result).toEqual({
425+
imgUrl: 'assets/img/ubs-admin-orders/arrow_up.svg',
426+
imgAlt: 'Arrow pointing up'
427+
});
428+
429+
const resultUneditable = service.getArrowImageSrc(false, false, false, true);
430+
expect(resultUneditable).toEqual({
431+
imgUrl: 'assets/img/ubs-admin-orders/arrow_up.svg',
432+
imgAlt: 'Arrow pointing up'
433+
});
434+
});
435+
436+
it('should return arrow down when page is open and valid or uneditable', () => {
437+
const result = service.getArrowImageSrc(false, true, true, false);
438+
expect(result).toEqual({
439+
imgUrl: 'assets/img/ubs-admin-orders/arrow_down.svg',
440+
imgAlt: 'Arrow pointing down'
441+
});
442+
443+
const resultUneditable = service.getArrowImageSrc(false, true, false, true);
444+
expect(resultUneditable).toEqual({
445+
imgUrl: 'assets/img/ubs-admin-orders/arrow_down.svg',
446+
imgAlt: 'Arrow pointing down'
447+
});
448+
});
449+
450+
it('should return red arrow down when page is open, not valid, and not uneditable', () => {
451+
const result = service.getArrowImageSrc(false, true, false, false);
452+
expect(result).toEqual({
453+
imgUrl: 'assets/img/ubs-admin-orders/red_arrow_down.svg',
454+
imgAlt: 'Red arrow pointing down'
455+
});
456+
});
457+
458+
it('should return no image for undefined conditions', () => {
459+
const result = service.getArrowImageSrc(false, false, false, false);
460+
expect(result).toEqual({
461+
imgUrl: '',
462+
imgAlt: 'No Image'
463+
});
464+
});
413465
});

src/app/ubs/ubs-admin/services/order.service.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,39 @@ export class OrderService {
9494
}
9595
}
9696

97+
getArrowImageSrc(
98+
isFormRequired: boolean,
99+
isPageOpen: boolean,
100+
isValid: boolean,
101+
isUneditableStatus: boolean
102+
): { imgUrl: string; imgAlt: string } {
103+
if (isFormRequired) {
104+
return {
105+
imgUrl: 'assets/img/ubs-admin-orders/red_arrow_up.svg',
106+
imgAlt: 'Red arrow pointing up'
107+
};
108+
} else if (!isPageOpen && (isValid || isUneditableStatus)) {
109+
return {
110+
imgUrl: 'assets/img/ubs-admin-orders/arrow_up.svg',
111+
imgAlt: 'Arrow pointing up'
112+
};
113+
} else if (isPageOpen && (isValid || isUneditableStatus)) {
114+
return {
115+
imgUrl: 'assets/img/ubs-admin-orders/arrow_down.svg',
116+
imgAlt: 'Arrow pointing down'
117+
};
118+
} else if (isPageOpen && !isValid && !isUneditableStatus) {
119+
return {
120+
imgUrl: 'assets/img/ubs-admin-orders/red_arrow_down.svg',
121+
imgAlt: 'Red arrow pointing down'
122+
};
123+
}
124+
return {
125+
imgUrl: '',
126+
imgAlt: 'No Image'
127+
};
128+
}
129+
97130
getOrderInfo(orderId: number): Observable<IOrderInfo> {
98131
return this.http.get<IOrderInfo>(`${this.backend}/management/get-data-for-order/${orderId}`);
99132
}

0 commit comments

Comments
 (0)