diff --git a/frontend/src/api/fetchEvents.ts b/frontend/src/api/fetchEvents.ts new file mode 100644 index 0000000..7738036 --- /dev/null +++ b/frontend/src/api/fetchEvents.ts @@ -0,0 +1,33 @@ +//Calendar implementation for the HTWK Leipzig timetable. Evaluation and display of the individual dates in iCal format. +//Copyright (C) 2024 HTWKalender support@htwkalender.de + +//This program is free software: you can redistribute it and/or modify +//it under the terms of the GNU Affero General Public License as published by +//the Free Software Foundation, either version 3 of the License, or +//(at your option) any later version. + +//This program is distributed in the hope that it will be useful, +//but WITHOUT ANY WARRANTY; without even the implied warranty of +//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +//GNU Affero General Public License for more details. + +//You should have received a copy of the GNU Affero General Public License +//along with this program. If not, see . + +// function to fetch course data from the API + +export async function fetchEventTypes(): Promise { + const eventTypes: string[] = []; + await fetch("/api/events/types") + .then((response) => { + return response.json() as Promise; + }) + .then((responseModules: string[]) => { + responseModules.forEach((eventType: string) => { + eventTypes.push( + eventType, + ); + }); + }); + return eventTypes; +} \ No newline at end of file diff --git a/frontend/src/components/AdditionalModuleTable.vue b/frontend/src/components/AdditionalModuleTable.vue index e62e436..d437567 100644 --- a/frontend/src/components/AdditionalModuleTable.vue +++ b/frontend/src/components/AdditionalModuleTable.vue @@ -30,6 +30,7 @@ import { useDialog } from "primevue/usedialog"; import router from "../router"; import { fetchModule } from "../api/fetchModule.ts"; import { useI18n } from "vue-i18n"; +import { fetchEventTypes } from "../api/fetchEvents.ts"; const dialog = useDialog(); const { t } = useI18n({ useScope: "global" }); @@ -39,6 +40,9 @@ if (store.isEmpty()) { router.replace("/"); } +const eventTypes: Ref = ref([]); + + const mobilePage = inject("mobilePage") as Ref; const filters = ref({ course: { @@ -51,7 +55,7 @@ const filters = ref({ }, eventType: { value: null, - matchMode: FilterMatchMode.CONTAINS, + matchMode: FilterMatchMode.IN, }, prof: { value: null, @@ -63,7 +67,7 @@ const loadedModules: Ref = ref(new Array(10)); const loadingData = ref(true); -onMounted(() => { +onMounted( () => { fetchAllModules() .then( (data) => @@ -74,6 +78,10 @@ onMounted(() => { .finally(() => { loadingData.value = false; }); + + fetchEventTypes().then((data) => { + eventTypes.value = data; + }); }); const ModuleInformation = defineAsyncComponent( @@ -184,16 +192,20 @@ function unselectModule(event: DataTableRowUnselectEvent) {