From b2a8cba1aa12f776bb0ff11314ab26949012f404 Mon Sep 17 00:00:00 2001 From: Rainer Killinger Date: Thu, 16 Feb 2023 15:36:19 +0100 Subject: [PATCH] fix: catalog semester selection --- src/app/modules/catalog/catalog.component.ts | 11 +++-- src/app/modules/catalog/catalog.provider.ts | 42 +++++++++++++++++--- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/app/modules/catalog/catalog.component.ts b/src/app/modules/catalog/catalog.component.ts index e14cd2ed..73b0eb9d 100644 --- a/src/app/modules/catalog/catalog.component.ts +++ b/src/app/modules/catalog/catalog.component.ts @@ -111,17 +111,22 @@ export class CatalogComponent implements OnInit, OnDestroy { } async fetchSemesters(): Promise { + const today = moment().startOf('day').toISOString(); const semesters = await this.catalogProvider.getRelevantSemesters(); - this.availableSemesters = semesters.slice(0, 3).reverse(); + const currentSemester = semesters.find( + semester => semester.startDate <= today && semester.endDate > today, + ); + const currentSemesterIndex = semesters.findIndex(semester => semester.uid === currentSemester?.uid); + this.availableSemesters = semesters.slice(currentSemesterIndex - 1, currentSemesterIndex + 2).reverse(); if (typeof this.activeSemester !== 'undefined') { return; } - const today = moment().startOf('day').toISOString(); + this.activeSemester = this.availableSemesters[0]; this.activeSemester = this.selectedSemesterUID === '' - ? this.availableSemesters.find(semester => semester.startDate <= today && semester.endDate > today) + ? currentSemester : this.availableSemesters.find(semester => semester.uid === this.selectedSemesterUID); if (this.activeSemester && this.selectedSemesterUID === '') { this.selectedSemesterUID = this.activeSemester.uid; diff --git a/src/app/modules/catalog/catalog.provider.ts b/src/app/modules/catalog/catalog.provider.ts index 226d12c1..f44c0f4e 100644 --- a/src/app/modules/catalog/catalog.provider.ts +++ b/src/app/modules/catalog/catalog.provider.ts @@ -107,14 +107,46 @@ export class CatalogProvider { const response = await this.dataProvider.search({ filter: { arguments: { - field: 'type', - value: SCThingType.Semester, + operation: 'and', + filters: [ + { + type: 'value', + arguments: { + field: 'type', + value: SCThingType.Semester, + }, + }, + { + type: 'date range', + arguments: { + bounds: { + lowerBound: { + limit: `${new Date().setFullYear(new Date().getFullYear() - 1)}`, + mode: 'inclusive', + }, + upperBound: { + limit: `${new Date().setFullYear(new Date().getFullYear() + 1)}`, + mode: 'inclusive', + }, + }, + field: 'startDate', + }, + }, + ], }, - type: 'value', + type: 'boolean', }, - size: 10, + sort: [ + { + arguments: { + field: 'startDate', + }, + order: 'desc', + type: 'generic', + }, + ], }); - return (response.data as SCSemester[]).sort((a, b) => b.startDate.localeCompare(a.startDate, 'en')); + return response.data as SCSemester[]; } }