From d29e2af31f754ca82fa96a618745e831736ecdaa Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Tue, 25 Mar 2025 21:39:52 +0100 Subject: [PATCH 01/12] fix(frontend): Menubalk niet tonen voor niet-aangemeldde gebruikers Dit lost de fout op. --- frontend/src/App.vue | 21 +- frontend/src/components/MenuBar.old.vue | 367 ++++++++++++++++++++++++ frontend/src/components/MenuBar.vue | 345 +++++++--------------- frontend/src/router/index.ts | 2 - 4 files changed, 497 insertions(+), 238 deletions(-) create mode 100644 frontend/src/components/MenuBar.old.vue diff --git a/frontend/src/App.vue b/frontend/src/App.vue index d355c43d..c592a5d7 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,10 +1,29 @@ diff --git a/frontend/src/components/MenuBar.old.vue b/frontend/src/components/MenuBar.old.vue new file mode 100644 index 00000000..40195b42 --- /dev/null +++ b/frontend/src/components/MenuBar.old.vue @@ -0,0 +1,367 @@ + + + + + diff --git a/frontend/src/components/MenuBar.vue b/frontend/src/components/MenuBar.vue index ed80d7c2..575fb9b1 100644 --- a/frontend/src/components/MenuBar.vue +++ b/frontend/src/components/MenuBar.vue @@ -43,67 +43,78 @@ - - - - - {{ t("assignments") }} - - + + + {{ initials }} + diff --git a/frontend/src/controllers/base-controller.ts b/frontend/src/controllers/base-controller.ts index adc0c8c0..c6024e52 100644 --- a/frontend/src/controllers/base-controller.ts +++ b/frontend/src/controllers/base-controller.ts @@ -1,4 +1,4 @@ -import {apiConfig} from "@/config.ts"; +import { apiConfig } from "@/config.ts"; export class BaseController { protected baseUrl: string; diff --git a/frontend/src/controllers/controllers.ts b/frontend/src/controllers/controllers.ts index b3bbeb61..ad526276 100644 --- a/frontend/src/controllers/controllers.ts +++ b/frontend/src/controllers/controllers.ts @@ -1,4 +1,4 @@ -import {ThemeController} from "@/controllers/themes.ts"; +import { ThemeController } from "@/controllers/themes.ts"; export function controllerGetter(Factory: new () => T): () => T { let instance: T | undefined; diff --git a/frontend/src/controllers/themes.ts b/frontend/src/controllers/themes.ts index 447c9248..bc76985e 100644 --- a/frontend/src/controllers/themes.ts +++ b/frontend/src/controllers/themes.ts @@ -1,4 +1,4 @@ -import {BaseController} from "@/controllers/base-controller.ts"; +import { BaseController } from "@/controllers/base-controller.ts"; export class ThemeController extends BaseController { constructor() { diff --git a/frontend/src/main.ts b/frontend/src/main.ts index fc531957..5945a2ab 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -10,7 +10,7 @@ import i18n from "./i18n/i18n.ts"; // Components import App from "./App.vue"; import router from "./router"; -import { VueQueryPlugin, QueryClient } from '@tanstack/vue-query'; +import { VueQueryPlugin, QueryClient } from "@tanstack/vue-query"; const app = createApp(App); diff --git a/frontend/src/queries/themes.ts b/frontend/src/queries/themes.ts index a4317c09..4568b7b4 100644 --- a/frontend/src/queries/themes.ts +++ b/frontend/src/queries/themes.ts @@ -1,11 +1,12 @@ -import { useQuery } from '@tanstack/vue-query'; -import { getThemeController } from '@/controllers/controllers'; -import {type MaybeRefOrGetter, toValue} from "vue"; +import { useQuery } from "@tanstack/vue-query"; +import { getThemeController } from "@/controllers/controllers"; +import { type MaybeRefOrGetter, toValue } from "vue"; const themeController = getThemeController(); -export const useThemeQuery = (language: MaybeRefOrGetter) => useQuery({ - queryKey: ['themes', language], +export const useThemeQuery = (language: MaybeRefOrGetter) => + useQuery({ + queryKey: ["themes", language], queryFn: () => { const lang = toValue(language); return themeController.getAll(lang); @@ -13,9 +14,9 @@ export const useThemeQuery = (language: MaybeRefOrGetter) => useQuery({ enabled: () => Boolean(toValue(language)), }); -export const useThemeHruidsQuery = (themeKey: string | null) => useQuery({ - queryKey: ['theme-hruids', themeKey], +export const useThemeHruidsQuery = (themeKey: string | null) => + useQuery({ + queryKey: ["theme-hruids", themeKey], queryFn: () => themeController.getHruidsByKey(themeKey!), enabled: Boolean(themeKey), }); - diff --git a/frontend/src/services/auth/auth-service.ts b/frontend/src/services/auth/auth-service.ts index a779c8a0..9fc0c434 100644 --- a/frontend/src/services/auth/auth-service.ts +++ b/frontend/src/services/auth/auth-service.ts @@ -5,7 +5,7 @@ import { computed, reactive } from "vue"; import type { AuthState, Role, UserManagersForRoles } from "@/services/auth/auth.d.ts"; import { User, UserManager } from "oidc-client-ts"; -import {AUTH_CONFIG_ENDPOINT, loadAuthConfig} from "@/services/auth/auth-config-loader.ts"; +import { AUTH_CONFIG_ENDPOINT, loadAuthConfig } from "@/services/auth/auth-config-loader.ts"; import authStorage from "./auth-storage.ts"; import { loginRoute } from "@/config.ts"; import apiClient from "@/services/api-client.ts"; diff --git a/frontend/src/utils/constants.ts b/frontend/src/utils/constants.ts index e046d9c3..b56437d7 100644 --- a/frontend/src/utils/constants.ts +++ b/frontend/src/utils/constants.ts @@ -1,37 +1,64 @@ export const THEMES_KEYS = [ - "kiks", "art", "socialrobot", "agriculture", "wegostem", - "computational_thinking", "math_with_python", "python_programming", - "stem", "care", "chatbot", "physical_computing", "algorithms", "basics_ai" + "kiks", + "art", + "socialrobot", + "agriculture", + "wegostem", + "computational_thinking", + "math_with_python", + "python_programming", + "stem", + "care", + "chatbot", + "physical_computing", + "algorithms", + "basics_ai", ]; export const THEMESITEMS: Record = { - "all": THEMES_KEYS, - "culture": ["art", "wegostem", "chatbot"], + all: THEMES_KEYS, + culture: ["art", "wegostem", "chatbot"], "electricity-and-mechanics": ["socialrobot", "wegostem", "stem", "physical_computing"], "nature-and-climate": ["kiks", "agriculture"], - "agriculture": ["agriculture"], - "society": ["kiks", "socialrobot", "care", "chatbot"], - "math": ["kiks", "math_with_python", "python_programming", "stem", "care", "basics_ai"], - "technology": ["socialrobot", "wegostem", "computational_thinking", "stem", "physical_computing", "basics_ai"], - "algorithms": ["math_with_python", "python_programming", "stem", "algorithms", "basics_ai"], + agriculture: ["agriculture"], + society: ["kiks", "socialrobot", "care", "chatbot"], + math: ["kiks", "math_with_python", "python_programming", "stem", "care", "basics_ai"], + technology: ["socialrobot", "wegostem", "computational_thinking", "stem", "physical_computing", "basics_ai"], + algorithms: ["math_with_python", "python_programming", "stem", "algorithms", "basics_ai"], }; -export const AGEITEMS = [ - "all", "primary-school", "lower-secondary", "upper-secondary", "high-school", "older" -]; +export const AGEITEMS = ["all", "primary-school", "lower-secondary", "upper-secondary", "high-school", "older"]; export const AGE_TO_THEMES: Record = { - "all": THEMES_KEYS, + all: THEMES_KEYS, "primary-school": ["wegostem", "computational_thinking", "physical_computing"], "lower-secondary": ["socialrobot", "art", "wegostem", "computational_thinking", "physical_computing"], - "upper-secondary": ["kiks", "art", "socialrobot", "agriculture", - "computational_thinking", "math_with_python", "python_programming", - "stem", "care", "chatbot", "algorithms", "basics_ai"], - "high-school": [ - "kiks", "art", "agriculture", "computational_thinking", "math_with_python", "python_programming", - "stem", "care", "chatbot", "algorithms", "basics_ai" + "upper-secondary": [ + "kiks", + "art", + "socialrobot", + "agriculture", + "computational_thinking", + "math_with_python", + "python_programming", + "stem", + "care", + "chatbot", + "algorithms", + "basics_ai", ], - "older": [ - "kiks", "computational_thinking", "algorithms", "basics_ai" - ] + "high-school": [ + "kiks", + "art", + "agriculture", + "computational_thinking", + "math_with_python", + "python_programming", + "stem", + "care", + "chatbot", + "algorithms", + "basics_ai", + ], + older: ["kiks", "computational_thinking", "algorithms", "basics_ai"], }; diff --git a/frontend/src/views/HomePage.vue b/frontend/src/views/HomePage.vue index 0899902d..436205e6 100644 --- a/frontend/src/views/HomePage.vue +++ b/frontend/src/views/HomePage.vue @@ -28,7 +28,7 @@ alt="Dwengo logo" style="align-self: center" /> -

{{ t("homeTitle") }}

+

{{ t("homeTitle") }}

{{ t("homeIntroduction1") }}

diff --git a/frontend/src/views/SingleTheme.vue b/frontend/src/views/SingleTheme.vue index 73336fa3..1a35a59f 100644 --- a/frontend/src/views/SingleTheme.vue +++ b/frontend/src/views/SingleTheme.vue @@ -1,11 +1,7 @@ - + - + diff --git a/frontend/src/views/homepage/UserHomePage.vue b/frontend/src/views/homepage/UserHomePage.vue index b6cdea17..c4f933a5 100644 --- a/frontend/src/views/homepage/UserHomePage.vue +++ b/frontend/src/views/homepage/UserHomePage.vue @@ -1,13 +1,13 @@ From d8e5fed2fe4671508b0e5c6f0c0200cc2bd11b00 Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger <165218235+geraldschmittinger@users.noreply.github.com> Date: Wed, 26 Mar 2025 11:30:17 +0100 Subject: [PATCH 09/12] fix(frontend): Redirect na login Na de login moet de gebruiker naar `/user` i.p.v. `/` geredirect worden --- frontend/src/views/CallbackPage.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/views/CallbackPage.vue b/frontend/src/views/CallbackPage.vue index 306dfe10..7f4d4958 100644 --- a/frontend/src/views/CallbackPage.vue +++ b/frontend/src/views/CallbackPage.vue @@ -8,7 +8,7 @@ onMounted(async () => { try { await auth.handleLoginCallback(); - await router.replace("/"); // Redirect to home (or dashboard) + await router.replace("/user"); // Redirect to theme page } catch (error) { console.error("OIDC callback error:", error); } From b3d17f4cb836b809ba83e7d33abea24914c15782 Mon Sep 17 00:00:00 2001 From: laurejablonski Date: Wed, 26 Mar 2025 18:46:13 +0100 Subject: [PATCH 10/12] fix: overbodige file verwijderd --- frontend/src/components/MenuBar.old.vue | 367 ------------------------ 1 file changed, 367 deletions(-) delete mode 100644 frontend/src/components/MenuBar.old.vue diff --git a/frontend/src/components/MenuBar.old.vue b/frontend/src/components/MenuBar.old.vue deleted file mode 100644 index 4945aec2..00000000 --- a/frontend/src/components/MenuBar.old.vue +++ /dev/null @@ -1,367 +0,0 @@ - - - - - From 00fb333ae8df5bdaa3ff623985d443aa2b643729 Mon Sep 17 00:00:00 2001 From: laurejablonski Date: Wed, 26 Mar 2025 18:47:08 +0100 Subject: [PATCH 11/12] style: linting --- frontend/src/components/MenuBar.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/MenuBar.vue b/frontend/src/components/MenuBar.vue index df1102ca..50c2eabe 100644 --- a/frontend/src/components/MenuBar.vue +++ b/frontend/src/components/MenuBar.vue @@ -31,12 +31,12 @@ localStorage.setItem("user-lang", langCode); }; - // contains functionality to let the collapsed menu appear and disappear - // when the screen size varies + // Contains functionality to let the collapsed menu appear and disappear + // When the screen size varies const drawer = ref(false); - // when the user wants to logout, a popup is shown to verify this - // if verified, the user should be logged out + // When the user wants to logout, a popup is shown to verify this + // If verified, the user should be logged out const performLogout = () => { auth.logout(); }; From e7518998e0ac5d37c73e8cb2bc844f4c1a96b086 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Sun, 30 Mar 2025 08:14:03 +0000 Subject: [PATCH 12/12] style: fix linting issues met Prettier --- backend/src/controllers/students.ts | 2 +- backend/src/entities/classes/class-join-request.entity.ts | 2 +- backend/src/services/learning-objects.ts | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/src/controllers/students.ts b/backend/src/controllers/students.ts index 5190c1d6..8ce5b11a 100644 --- a/backend/src/controllers/students.ts +++ b/backend/src/controllers/students.ts @@ -60,7 +60,7 @@ export async function createStudentHandler(req: Request, res: Response) { if (!newUser) { res.status(500).json({ - error: 'Something went wrong while creating student' + error: 'Something went wrong while creating student', }); return; } diff --git a/backend/src/entities/classes/class-join-request.entity.ts b/backend/src/entities/classes/class-join-request.entity.ts index 64a597bb..fdf13aa9 100644 --- a/backend/src/entities/classes/class-join-request.entity.ts +++ b/backend/src/entities/classes/class-join-request.entity.ts @@ -27,4 +27,4 @@ export class ClassJoinRequest { @Enum(() => ClassJoinRequestStatus) status!: ClassJoinRequestStatus; -} \ No newline at end of file +} diff --git a/backend/src/services/learning-objects.ts b/backend/src/services/learning-objects.ts index 85141b1d..faa77cb4 100644 --- a/backend/src/services/learning-objects.ts +++ b/backend/src/services/learning-objects.ts @@ -92,4 +92,3 @@ export async function getLearningObjectsFromPath(hruid: string, language: string export async function getLearningObjectIdsFromPath(hruid: string, language: string): Promise { return (await fetchLearningObjects(hruid, false, language)) as string[]; } -