mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender-pwa.git
synced 2025-08-07 04:09:17 +02:00
feat:#28 rewrote frontend input for filter eventTypes
This commit is contained in:
33
frontend/src/api/fetchEvents.ts
Normal file
33
frontend/src/api/fetchEvents.ts
Normal file
@@ -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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
// function to fetch course data from the API
|
||||||
|
|
||||||
|
export async function fetchEventTypes(): Promise<string[]> {
|
||||||
|
const eventTypes: string[] = [];
|
||||||
|
await fetch("/api/events/types")
|
||||||
|
.then((response) => {
|
||||||
|
return response.json() as Promise<string[]>;
|
||||||
|
})
|
||||||
|
.then((responseModules: string[]) => {
|
||||||
|
responseModules.forEach((eventType: string) => {
|
||||||
|
eventTypes.push(
|
||||||
|
eventType,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return eventTypes;
|
||||||
|
}
|
@@ -30,6 +30,7 @@ import { useDialog } from "primevue/usedialog";
|
|||||||
import router from "../router";
|
import router from "../router";
|
||||||
import { fetchModule } from "../api/fetchModule.ts";
|
import { fetchModule } from "../api/fetchModule.ts";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
|
import { fetchEventTypes } from "../api/fetchEvents.ts";
|
||||||
|
|
||||||
const dialog = useDialog();
|
const dialog = useDialog();
|
||||||
const { t } = useI18n({ useScope: "global" });
|
const { t } = useI18n({ useScope: "global" });
|
||||||
@@ -39,6 +40,9 @@ if (store.isEmpty()) {
|
|||||||
router.replace("/");
|
router.replace("/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const eventTypes: Ref<string[]> = ref([]);
|
||||||
|
|
||||||
|
|
||||||
const mobilePage = inject("mobilePage") as Ref<boolean>;
|
const mobilePage = inject("mobilePage") as Ref<boolean>;
|
||||||
const filters = ref({
|
const filters = ref({
|
||||||
course: {
|
course: {
|
||||||
@@ -51,7 +55,7 @@ const filters = ref({
|
|||||||
},
|
},
|
||||||
eventType: {
|
eventType: {
|
||||||
value: null,
|
value: null,
|
||||||
matchMode: FilterMatchMode.CONTAINS,
|
matchMode: FilterMatchMode.IN,
|
||||||
},
|
},
|
||||||
prof: {
|
prof: {
|
||||||
value: null,
|
value: null,
|
||||||
@@ -63,7 +67,7 @@ const loadedModules: Ref<Module[]> = ref(new Array(10));
|
|||||||
|
|
||||||
const loadingData = ref(true);
|
const loadingData = ref(true);
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted( () => {
|
||||||
fetchAllModules()
|
fetchAllModules()
|
||||||
.then(
|
.then(
|
||||||
(data) =>
|
(data) =>
|
||||||
@@ -74,6 +78,10 @@ onMounted(() => {
|
|||||||
.finally(() => {
|
.finally(() => {
|
||||||
loadingData.value = false;
|
loadingData.value = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
fetchEventTypes().then((data) => {
|
||||||
|
eventTypes.value = data;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const ModuleInformation = defineAsyncComponent(
|
const ModuleInformation = defineAsyncComponent(
|
||||||
@@ -184,16 +192,20 @@ function unselectModule(event: DataTableRowUnselectEvent) {
|
|||||||
</Column>
|
</Column>
|
||||||
<Column
|
<Column
|
||||||
field="eventType"
|
field="eventType"
|
||||||
|
filter-field="eventType"
|
||||||
|
:filter-menu-style="{ width: '10rem' }"
|
||||||
|
style="min-width: 10rem"
|
||||||
:header="$t('additionalModules.eventType')"
|
:header="$t('additionalModules.eventType')"
|
||||||
:show-clear-button="false"
|
:show-clear-button="false"
|
||||||
:show-filter-menu="false"
|
:show-filter-menu="false"
|
||||||
>
|
>
|
||||||
<template #filter="{ filterModel, filterCallback }">
|
<template #filter="{ filterModel, filterCallback }">
|
||||||
<InputText
|
<MultiSelect
|
||||||
v-model="filterModel.value"
|
v-model="filterModel.value"
|
||||||
type="text"
|
:options="eventTypes"
|
||||||
class="p-column-filter max-w-10rem"
|
class="p-column-filter max-w-10rem"
|
||||||
@input="filterCallback()"
|
style="min-width: 10rem"
|
||||||
|
@change="filterCallback()"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="loadingData" #body>
|
<template v-if="loadingData" #body>
|
||||||
|
Reference in New Issue
Block a user