Skip to content

Commit 64968df

Browse files
committed
Fix null injector error in line grade pipe
1 parent 9a35d5a commit 64968df

File tree

8 files changed

+78
-120
lines changed

8 files changed

+78
-120
lines changed

client/package-lock.json

+6-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"@angular/platform-browser": "^19.2.2",
2727
"@angular/platform-browser-dynamic": "^19.2.2",
2828
"@angular/router": "^19.2.2",
29-
"@jsverse/transloco": "^7.5.1",
29+
"@jsverse/transloco": "^7.6.1",
3030
"@jsverse/transloco-keys-manager": "^6.1.0",
3131
"@ngneat/until-destroy": "^10.0.0",
3232
"@ngrx/effects": "^19.0.1",

client/src/app/modules/area/area.module.ts

-82
This file was deleted.

client/src/app/modules/area/area/area.component.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Sector } from '../../../models/sector';
44
import { MenuItem } from 'primeng/api';
55
import { CragsService } from '../../../services/crud/crags.service';
66
import { SectorsService } from '../../../services/crud/sectors.service';
7-
import { TranslocoService } from '@jsverse/transloco';
7+
import { TRANSLOCO_SCOPE, TranslocoService } from '@jsverse/transloco';
88
import {
99
ActivatedRoute,
1010
Router,
@@ -47,6 +47,7 @@ import { SetActiveTabDirective } from '../../shared/directives/set-active-tab.di
4747
RouterLink,
4848
RouterOutlet,
4949
],
50+
providers: [{ provide: TRANSLOCO_SCOPE, useValue: 'area' }],
5051
})
5152
@UntilDestroy()
5253
export class AreaComponent implements OnInit {

client/src/app/modules/sector/sector.module.ts

-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { BreadcrumbModule } from 'primeng/breadcrumb';
1111
import { EditorModule } from 'primeng/editor';
1212
import { ConfirmPopupModule } from 'primeng/confirmpopup';
1313
import { InputTextModule } from 'primeng/inputtext';
14-
import { AreaModule } from '../area/area.module';
1514
import { GradeDistributionBarChartComponent } from '../shared/components/grade-distribution-bar-chart/grade-distribution-bar-chart.component';
1615
import { ChipModule } from 'primeng/chip';
1716
import { CoordinatesComponent } from '../shared/forms/controls/coordinates/coordinates.component';
@@ -47,7 +46,6 @@ import { TopoDataviewSkeletonComponent } from '../shared/components/topo-datavie
4746
BreadcrumbModule,
4847
EditorModule,
4948
ConfirmPopupModule,
50-
AreaModule,
5149
GradeDistributionBarChartComponent,
5250
ChipModule,
5351
CoordinatesComponent,
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,52 @@
1-
import { Pipe, PipeTransform } from '@angular/core';
1+
import { OnDestroy, Pipe, PipeTransform } from '@angular/core';
22
import { Line } from '../../../models/line';
3-
import { AsyncPipe } from '@angular/common';
43
import { ScalesService } from '../../../services/crud/scales.service';
5-
import { TranslateSpecialGradesPipe } from './translate-special-grades.pipe';
4+
import { TranslateSpecialGradesService } from '../../../services/core/translate-special-grades.service';
5+
import { Subscription } from 'rxjs';
66

77
@Pipe({
88
name: 'lineGrade',
99
pure: false,
1010
})
11-
export class LineGradePipe implements PipeTransform {
11+
export class LineGradePipe implements PipeTransform, OnDestroy {
12+
private subscription: Subscription | null = null;
13+
private cachedResult: string | null = null;
14+
private lastLine: Line | undefined;
15+
1216
constructor(
17+
private translateSpecialGradesService: TranslateSpecialGradesService,
1318
private scalesService: ScalesService,
14-
private asyncPipe: AsyncPipe,
15-
private translate: TranslateSpecialGradesPipe,
1619
) {}
1720

1821
transform(line?: Line): string {
19-
const observable = this.scalesService.gradeNameByValue(
20-
line?.type,
21-
line?.gradeScale,
22-
line?.gradeValue,
23-
);
24-
return this.translate.transform(this.asyncPipe.transform(observable));
22+
if (line !== this.lastLine) {
23+
this.lastLine = line;
24+
this.cachedResult = null;
25+
26+
if (this.subscription) {
27+
this.subscription.unsubscribe();
28+
}
29+
30+
if (line) {
31+
const observable = this.scalesService.gradeNameByValue(
32+
line.type,
33+
line.gradeScale,
34+
line.gradeValue,
35+
);
36+
37+
this.subscription = observable.subscribe((gradeName) => {
38+
this.cachedResult =
39+
this.translateSpecialGradesService.translate(gradeName);
40+
});
41+
}
42+
}
43+
44+
return this.cachedResult || '';
45+
}
46+
47+
ngOnDestroy(): void {
48+
if (this.subscription) {
49+
this.subscription.unsubscribe();
50+
}
2551
}
2652
}
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,16 @@
11
import { Pipe, PipeTransform } from '@angular/core';
2-
import { TranslocoPipe } from '@jsverse/transloco';
3-
import { marker } from '@jsverse/transloco-keys-manager/marker';
2+
import { TranslateSpecialGradesService } from '../../../services/core/translate-special-grades.service';
43

54
@Pipe({
65
name: 'translateSpecialGrades',
6+
standalone: true,
77
})
8-
export class TranslateSpecialGradesPipe
9-
extends TranslocoPipe
10-
implements PipeTransform
11-
{
12-
override transform(value: string): string {
13-
const specialGrades: string[] = [
14-
marker('CLOSED_PROJECT'),
15-
marker('OPEN_PROJECT'),
16-
marker('UNGRADED'),
17-
];
18-
if (specialGrades.includes(value)) {
19-
return super.transform(value);
20-
}
21-
return value;
8+
export class TranslateSpecialGradesPipe implements PipeTransform {
9+
constructor(
10+
private translateSpecialGradesService: TranslateSpecialGradesService,
11+
) {}
12+
13+
public transform(value: string): string {
14+
return this.translateSpecialGradesService.translate(value);
2215
}
2316
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { Injectable } from '@angular/core';
2+
import { marker } from '@jsverse/transloco-keys-manager/marker';
3+
import { TranslocoService } from '@jsverse/transloco';
4+
5+
@Injectable({
6+
providedIn: 'root',
7+
})
8+
export class TranslateSpecialGradesService {
9+
constructor(private translocoService: TranslocoService) {}
10+
11+
public translate(value: string): string {
12+
const specialGrades: string[] = [
13+
marker('CLOSED_PROJECT'),
14+
marker('OPEN_PROJECT'),
15+
marker('UNGRADED'),
16+
];
17+
if (specialGrades.includes(value)) {
18+
return this.translocoService.translate(value);
19+
}
20+
return value;
21+
}
22+
}

0 commit comments

Comments
 (0)