From 582e6af2c9a2fe251029285c85281b8dd24ecf9d Mon Sep 17 00:00:00 2001 From: imperosol Date: Mon, 31 Aug 2026 18:37:37 +0200 Subject: [PATCH] add a switch to filter closed UEs --- pedagogy/schemas.py | 8 ++++++++ pedagogy/static/bundled/pedagogy/guide-index.ts | 13 +++++++++++-- pedagogy/templates/pedagogy/guide.jinja | 4 ++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/pedagogy/schemas.py b/pedagogy/schemas.py index c25df71f..34c2f5a9 100644 --- a/pedagogy/schemas.py +++ b/pedagogy/schemas.py @@ -153,6 +153,7 @@ class UeFilterSchema(FilterSchema): set[Literal["CS", "TM", "EC", "OM", "QC"]] | None, FilterLookup("credit_type__in"), ] = None + is_open: bool | None = None language: str = "FR" department: Annotated[set[str] | None, FilterLookup("department__in")] = None @@ -187,3 +188,10 @@ class UeFilterSchema(FilterSchema): return Q() value.add("AUTUMN_AND_SPRING") return Q(semester__in=value) + + def filter_is_open(self, value: bool | None) -> Q: # noqa: FBT001 + if value is None: + return Q() + if not value: + return Q(semester="CLOSED") + return ~Q(semester="CLOSED") diff --git a/pedagogy/static/bundled/pedagogy/guide-index.ts b/pedagogy/static/bundled/pedagogy/guide-index.ts index 462ba676..5e27d424 100644 --- a/pedagogy/static/bundled/pedagogy/guide-index.ts +++ b/pedagogy/static/bundled/pedagogy/guide-index.ts @@ -17,6 +17,7 @@ document.addEventListener("alpine:init", () => { // biome-ignore lint/style/useNamingConvention: api is in snake_case page_size: pageSizeDefault, search: "", + hideClosedUes: true, department: [] as string[], // biome-ignore lint/style/useNamingConvention: api is in snake_case credit_type: [] as string[], @@ -38,6 +39,7 @@ document.addEventListener("alpine:init", () => { 10, ); this.search = url.get("search") || ""; + this.hideClosedUes = url.get("hideClosed") || true; this.department = url.getAll("department"); this.credit_type = url.getAll("credit_type"); /* The semester is easier to use on the backend as an enum (spring/autumn/both/none) @@ -58,7 +60,13 @@ document.addEventListener("alpine:init", () => { this.to_change = []; }, 50); - const searchParams = ["search", "department", "credit_type", "semester"]; + const searchParams = [ + "search", + "hideClosedUes", + "department", + "credit_type", + "semester", + ]; const paginationParams = ["page", "page_size"]; for (const param of searchParams) { @@ -87,7 +95,8 @@ document.addEventListener("alpine:init", () => { // biome-ignore lint/style/useNamingConvention: api is in snake_case credit_type: this.credit_type.length > 0 ? this.credit_type : undefined, semester: this.semester.length > 0 ? this.semester : undefined, - + // biome-ignore lint/style/useNamingConvention: api is snake_case + is_open: this.hideClosedUes ? true : undefined, department: this.department.length > 0 ? this.department : undefined, search: this.search || undefined, }, diff --git a/pedagogy/templates/pedagogy/guide.jinja b/pedagogy/templates/pedagogy/guide.jinja index 66e0f3b4..8cbfe58d 100644 --- a/pedagogy/templates/pedagogy/guide.jinja +++ b/pedagogy/templates/pedagogy/guide.jinja @@ -44,6 +44,10 @@ x-model.debounce.500ms="search" /> +
+ + +
{% set departments = [