From 1f2da90eb3f41b6e8edbb94b1255c57525036de6 Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Fri, 24 Jul 2026 09:57:40 +0200 Subject: [PATCH] Add extraction of sidebar menu component from tempus component --- public/js/components/Tempus/SidebarMenu.js | 168 +++++++++++++++++++++ public/js/components/Tempus/Tempus.js | 147 +++++------------- 2 files changed, 208 insertions(+), 107 deletions(-) create mode 100644 public/js/components/Tempus/SidebarMenu.js diff --git a/public/js/components/Tempus/SidebarMenu.js b/public/js/components/Tempus/SidebarMenu.js new file mode 100644 index 000000000..d8ff543e1 --- /dev/null +++ b/public/js/components/Tempus/SidebarMenu.js @@ -0,0 +1,168 @@ +import FhcCoursepicker from "./Coursepicker.js"; +import LectureSelection from "./Filters/LectureSelection.js"; +import VerbandSelection from "./Filters/VerbandSelection.js"; +import RoomSelection from "./Filters/RoomSelection.js"; +import ParkingSlot from "./ParkingSlot.js"; +import StvStudiensemester from "../Stv/Studentenverwaltung/Studiensemester.js"; + +export default { + name: "TempusSidebarMenu", + components: { + FhcCoursepicker, + LectureSelection, + VerbandSelection, + RoomSelection, + ParkingSlot, + StvStudiensemester, + }, + props: { + previewRole: { + type: String, + required: true, + }, + rooms: { + type: Array, + required: true, + }, + studiengaenge: { + type: Array, + required: true, + }, + studiengaengeAll: { + type: Array, + default: () => [], + }, + lecturers: { + type: Array, + required: true, + }, + selectedStudiensemester: { + type: String, + required: true, + }, + }, + emits: [ + "update:previewRole", + "update:rooms", + "update:studiengaenge", + "update:parkedKeys", + "update:selectedStudiensemester", + "remove-lecturer", + "select-lecturer", + "select-kw", + "sync", + ], + methods: { + reloadCoursepicker() { + return this.$refs.coursepicker?.reload(); + }, + isParked(id) { + return this.$refs.parking?.isParked(id) ?? false; + }, + park(items) { + return this.$refs.parking?.park(null, items); + }, + unpark(item) { + return this.$refs.parking?.unpark(item); + }, + }, + template: /* html */ ` + + `, +}; diff --git a/public/js/components/Tempus/Tempus.js b/public/js/components/Tempus/Tempus.js index 4c37fd3b5..c0b7c4148 100644 --- a/public/js/components/Tempus/Tempus.js +++ b/public/js/components/Tempus/Tempus.js @@ -16,11 +16,6 @@ */ import VerticalSplit from "../verticalsplit/verticalsplit.js"; import FhcCalendar from "../Calendar/Tempus.js"; -import FhcCoursepicker from "./Coursepicker.js"; -import LectureSelection from "./Filters/LectureSelection.js"; -import VerbandSelection from "./Filters/VerbandSelection.js"; -import RoomSelection from "./Filters/RoomSelection.js"; -import ParkingSlot from "./ParkingSlot.js"; import ApiKalender from "../../api/factory/tempus/kalender.js"; import ApiSearchbar from "../../api/factory/searchbar.js"; import ApiRenderers from "../../api/factory/renderers.js"; @@ -33,7 +28,6 @@ import BsModal from "../Bootstrap/Modal.js"; import ApiStudiengangTree from "../../api/factory/tempus/studiengangtree.js"; import ApiInfo from "../../api/factory/tempus/info.js"; -import StvStudiensemester from "../Stv/Studentenverwaltung/Studiensemester.js"; import Reservierung from "./Reservierung.js"; import { getTempusShortcuts } from "./shortcuts.js"; import KeyboardShortcuts from "./KeyboardShortcuts.js"; @@ -46,23 +40,19 @@ import { getTempusSearchbarOptions } from "./Filters/searchbarOptions.js"; import TempusHeader from "./Header.js"; import TempusAppMenu from "./AppMenu.js"; import TempusVerbandMenu from "./VerbandMenu.js"; +import TempusSidebarMenu from "./SidebarMenu.js"; export default { name: "Tempus", components: { VerticalSplit, FhcCalendar, - FhcCoursepicker, - LectureSelection, - VerbandSelection, - RoomSelection, - ParkingSlot, AppConfig, TempusAppMenu, TempusHeader, BsModal, TempusVerbandMenu, - StvStudiensemester, + TempusSidebarMenu, Multiselect: primevue.multiselect, Reservierung, KeyboardShortcuts, @@ -217,7 +207,7 @@ export default { await this.deleteEntryCall(orig); this.$refs.calendar.resetEventLoader(); - this.$refs.coursepicker.reload(); + this.$refs.sidebar.reloadCoursepicker(); }, async deleteEntries(origList) { let validList = (origList ?? []).filter((orig) => orig?.kalender_id); @@ -227,13 +217,16 @@ export default { validList.map((orig) => this.deleteEntryCall(orig)), ); this.$refs.calendar.resetEventLoader(); - this.$refs.coursepicker.reload(); + this.$refs.sidebar.reloadCoursepicker(); }, async deleteEntryCall(orig) { await this.$api .call(ApiKalender.deleteEntry(orig.kalender_id)) .then(() => { - this.$refs.parking.unpark({ type: orig.type, id: orig.kalender_id }); + this.$refs.sidebar.unpark({ + type: orig.type, + id: orig.kalender_id, + }); }); }, async openHistory(orig) { @@ -534,7 +527,7 @@ export default { dates.end_time, () => { this.$refs.calendar.resetEventLoader(); - this.$refs.coursepicker.reload(); + this.$refs.sidebar.reloadCoursepicker(); }, ); }, @@ -603,7 +596,7 @@ export default { .then((result) => result.data) .then((result) => { this.$refs.calendar.resetEventLoader(); - this.$refs.coursepicker.reload(); + this.$refs.sidebar.reloadCoursepicker(); this.bcc.postMessage("dropped"); }); } else if (obj.type === "kalender") { @@ -614,7 +607,7 @@ export default { start_time, end_time, () => { - this.$refs.parking.unpark({ + this.$refs.sidebar.unpark({ type: obj.type, id: obj.orig.kalender_id, }); @@ -638,7 +631,7 @@ export default { }, onMultiWeekConfirmed() { this.$refs.calendar.resetEventLoader(); - this.$refs.coursepicker.reload(); + this.$refs.sidebar.reloadCoursepicker(); this.bcc.postMessage("dropped"); }, handleRange(range) { @@ -765,6 +758,10 @@ export default { this.$refs.calendar.resetEventLoader(); } }, + handlePreviewRoleChange(role) { + this.previewRole = role; + this.$refs.calendar.resetEventLoader(); + }, triggerSync() { this.$api .call(ApiKalender.sync()) @@ -782,10 +779,13 @@ export default { const event = this.hoveredEvent; if (!event?.kalender_id) return; - if (this.$refs.parking.isParked(event.kalender_id)) { - this.$refs.parking.unpark({ type: event.type, id: event.kalender_id }); + if (this.$refs.sidebar.isParked(event.kalender_id)) { + this.$refs.sidebar.unpark({ + type: event.type, + id: event.kalender_id, + }); } else { - this.$refs.parking.park(null, { + this.$refs.sidebar.park({ type: "kalender", id: event.kalender_id, orig: event, @@ -913,91 +913,24 @@ export default {
- +