fix: catalog semester selection

This commit is contained in:
Rainer Killinger
2023-02-16 15:36:19 +01:00
committed by Thea Schöbl
parent 260fbe01db
commit b2a8cba1aa
2 changed files with 45 additions and 8 deletions

View File

@@ -111,17 +111,22 @@ export class CatalogComponent implements OnInit, OnDestroy {
} }
async fetchSemesters(): Promise<void> { async fetchSemesters(): Promise<void> {
const today = moment().startOf('day').toISOString();
const semesters = await this.catalogProvider.getRelevantSemesters(); 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') { if (typeof this.activeSemester !== 'undefined') {
return; return;
} }
const today = moment().startOf('day').toISOString();
this.activeSemester = this.availableSemesters[0]; this.activeSemester = this.availableSemesters[0];
this.activeSemester = this.activeSemester =
this.selectedSemesterUID === '' this.selectedSemesterUID === ''
? this.availableSemesters.find(semester => semester.startDate <= today && semester.endDate > today) ? currentSemester
: this.availableSemesters.find(semester => semester.uid === this.selectedSemesterUID); : this.availableSemesters.find(semester => semester.uid === this.selectedSemesterUID);
if (this.activeSemester && this.selectedSemesterUID === '') { if (this.activeSemester && this.selectedSemesterUID === '') {
this.selectedSemesterUID = this.activeSemester.uid; this.selectedSemesterUID = this.activeSemester.uid;

View File

@@ -107,14 +107,46 @@ export class CatalogProvider {
const response = await this.dataProvider.search({ const response = await this.dataProvider.search({
filter: { filter: {
arguments: { arguments: {
field: 'type', operation: 'and',
value: SCThingType.Semester, 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[];
} }
} }