From 7ab412a59b08e2eef9dcb8d97638f59a66e74d60 Mon Sep 17 00:00:00 2001 From: imperosol Date: Wed, 30 Sep 2026 17:02:02 +0200 Subject: [PATCH] User timetable save --- .../bundled/timetable/generator-index.ts | 41 +++++++++++++++++-- timetable/templates/timetable/generator.jinja | 41 +++++++++++++++---- 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/timetable/static/bundled/timetable/generator-index.ts b/timetable/static/bundled/timetable/generator-index.ts index 761f6248..ea843b1d 100644 --- a/timetable/static/bundled/timetable/generator-index.ts +++ b/timetable/static/bundled/timetable/generator-index.ts @@ -1,4 +1,6 @@ import html2canvas from "html2canvas"; +import { AlertMessage } from "#core:utils/alert-message"; +import { timetableSaveTimetable } from "#openapi"; // see https://regex101.com/r/QHSaPM/3 const TIMETABLE_ROW_RE: RegExp = @@ -83,10 +85,10 @@ document.addEventListener("alpine:init", () => { courses: [] as TimetableSlot[], startSlot: 0, endSlot: 0, - table: { - height: 0, - width: 0, - }, + table: { height: 0, width: 0 }, + edtPublic: false, + saving: false, + timetableSavedMessage: new AlertMessage(), colors: {} as Record, colorPalette: [ @@ -181,5 +183,36 @@ document.addEventListener("alpine:init", () => { downloadLink.click(); downloadLink.remove(); }, + + async saveSith() { + this.saving = true; + const res = await timetableSaveTimetable({ + body: { + // biome-ignore lint/style/useNamingConvention: api is snake case + is_viewable: this.edtPublic, + slots: this.courses.map((c) => + Object.assign({}, c, { + // biome-ignore lint/style/useNamingConvention: api is snake case + start_at: c.startSlot, + // biome-ignore lint/style/useNamingConvention: api is snake case + end_at: c.endSlot, + weekday: WEEKDAYS.indexOf(c.weekday) + 1, + }), + ), + }, + }); + if (res.response?.ok) { + this.timetableSavedMessage.display( + gettext("This timetable has been saved in your profile"), + { success: true }, + ); + } else { + this.timetableSavedMessage.display( + interpolate(gettext("Error %d: timetable save failed"), res.response?.status), + { success: false }, + ); + } + this.saving = false; + }, })); }); diff --git a/timetable/templates/timetable/generator.jinja b/timetable/templates/timetable/generator.jinja index 27bd83a2..0769181f 100644 --- a/timetable/templates/timetable/generator.jinja +++ b/timetable/templates/timetable/generator.jinja @@ -92,12 +92,39 @@ - + {% endblock content %}