Skip to content

Commit

Permalink
optional gradingScaleId in course, refs 428
Browse files Browse the repository at this point in the history
  • Loading branch information
mburri authored and caebr committed Jul 19, 2022
1 parent 96fa4b2 commit 3a39641
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 11 deletions.
17 changes: 12 additions & 5 deletions src/app/events/services/test-state.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
combineLatest,
merge,
Observable,
of,
ReplaySubject,
scan,
shareReplay,
Expand Down Expand Up @@ -123,18 +124,22 @@ export class TestStateService {
this.gradingScaleIds$
);

private UNDEFINED_GRADINGSCALE_ID = -1;
private gradingScalesOptions$: Observable<GradingScaleOptions> = this.gradingScales$.pipe(
map((gradingScales) =>
gradingScales
.map((gradingScale) => {
return {
id: gradingScale.Id,
options: gradingScale.Grades.map((gradeOption) => {
const id = gradingScale?.Id || this.UNDEFINED_GRADINGSCALE_ID;
const options =
gradingScale?.Grades.map((gradeOption) => {
return {
Key: gradeOption.Id,
Value: gradeOption.Designation,
};
}),
}) || [];
return {
id,
options,
};
})
.reduce(
Expand Down Expand Up @@ -287,7 +292,8 @@ export class TestStateService {
});
}

private gradingOptions$(gradingScaleId: number) {
private gradingOptions$(gradingScaleId: number | null) {
if (gradingScaleId === null) return of(null);
return this.gradingScalesOptions$.pipe(
map((gradingScaleOptions) => gradingScaleOptions[gradingScaleId]),
shareReplay(1)
Expand All @@ -300,6 +306,7 @@ export class TestStateService {
): Observable<number | null> {
return this.course$.pipe(
map((course: Course) => {
if (course.GradingScaleId === null) return null;
if (gradingScaleOptions[course.GradingScaleId] === undefined)
return null;
const scale = gradingScaleOptions[course.GradingScaleId]!;
Expand Down
2 changes: 1 addition & 1 deletion src/app/shared/models/course.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ const Course = t.type({
// EventManagers: null,
// MainEventManagers: null,
// TimetableEntries: null,
GradingScaleId: t.number,
GradingScaleId: Option(t.number),
FinalGrades: Option(t.array(FinalGrading)),
Gradings: Option(t.array(Grading)),
Tests: Option(t.array(Test)),
Expand Down
11 changes: 6 additions & 5 deletions src/app/shared/services/grading-scales-rest.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { HttpClient } from '@angular/common/http';
import { Inject, Injectable } from '@angular/core';
import { forkJoin, Observable, shareReplay, switchMap } from 'rxjs';
import { forkJoin, Observable, of, shareReplay, switchMap } from 'rxjs';
import { Settings, SETTINGS } from 'src/app/settings';
import { GradingScale } from '../models/grading-scale.model';
import { decode } from '../utils/decode';
Expand All @@ -14,18 +14,19 @@ export class GradingScalesRestService extends RestService<typeof GradingScale> {
super(http, settings, GradingScale, 'GradingScales');
}

getGradingScale(id: number): Observable<GradingScale> {
getGradingScale(id: number | null): Observable<GradingScale | null> {
if (id === null) return of(null);
return this.http
.get<unknown>(`${this.baseUrl}/${id}`)
.pipe(switchMap(decode(GradingScale)));
}

loadGradingScales(
observable: Observable<number[]>
): Observable<ReadonlyArray<GradingScale>> {
observable: Observable<(number | null)[]>
): Observable<ReadonlyArray<GradingScale | null>> {
return observable.pipe(
switchMap((ids) =>
forkJoin(ids.map((id: number) => this.getGradingScale(id)))
forkJoin(ids.map((id: number | null) => this.getGradingScale(id)))
),
shareReplay(1)
);
Expand Down

0 comments on commit 3a39641

Please sign in to comment.