From 550033b9cf75040b8d73da3a415d6646b08754ca Mon Sep 17 00:00:00 2001 From: Erza Bytyci Date: Fri, 8 May 2026 10:03:18 +0000 Subject: [PATCH] remove the BasePath --- Dockerfile | 1 - gradesa/next.config.mjs | 7 +---- .../app/admin/create-exercise/click/page.js | 24 +++++++---------- .../admin/create-exercise/dnd-match/page.js | 27 +++++++------------ .../admin/create-exercise/dragdrop/page.js | 3 +-- .../free-form/[exercise_id]/edit/page.js | 3 +-- .../admin/create-exercise/multichoice/page.js | 5 ++-- .../edit-page/[type]/[slug]/editor-section.js | 26 ++++++++---------- gradesa/src/app/admin/glossary/create/page.js | 5 +--- gradesa/src/app/admin/new-page/page.js | 5 ++-- gradesa/src/app/edit_info/edit_email/page.js | 5 ++-- .../src/app/edit_info/edit_password/page.js | 3 +-- gradesa/src/app/edit_info/page.js | 3 +-- .../src/app/grammar/exercises/click/page.js | 10 +++---- .../app/grammar/exercises/dnd-match/page.js | 3 +-- .../app/grammar/exercises/dragdrop/page.js | 3 +-- .../grammar/exercises/fillinthegap/page.js | 3 +-- .../app/grammar/exercises/freeform/page.js | 3 +-- .../app/grammar/exercises/multichoice/page.js | 3 +-- .../app/pages/[type]/[slug]/admin-buttons.js | 7 +++-- gradesa/src/app/talkback/page.js | 3 +-- .../ui/button/exercise-link-button.js | 3 +-- .../src/components/ui/dnd-match/MatchArea.js | 3 +-- gradesa/src/components/ui/dragdrop/area.js | 5 +--- .../components/ui/render-html/render-html.jsx | 26 +----------------- gradesa/src/components/ui/sidebar/sidebar.js | 3 +-- gradesa/src/shared/hooks/useQuery.js | 3 +-- gradesa/src/shared/utils/basePath.js | 6 ----- 28 files changed, 61 insertions(+), 140 deletions(-) delete mode 100644 gradesa/src/shared/utils/basePath.js diff --git a/Dockerfile b/Dockerfile index 9b062a3..0522d9f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,7 +39,6 @@ ENV SESSION_SECRET=$SESSION_SECRET \ DB_PASSWORD=$DB_PASSWORD \ DB_NAME=$DB_NAME \ NODE_ENV=$NODE_ENV \ - NEXT_PUBLIC_BASE_PATH=$NEXT_PUBLIC_BASE_PATH # Install ALL dependencies (including dev) for build RUN npm ci diff --git a/gradesa/next.config.mjs b/gradesa/next.config.mjs index 4b839d7..148bc78 100644 --- a/gradesa/next.config.mjs +++ b/gradesa/next.config.mjs @@ -1,12 +1,8 @@ -const basePath = process.env.NEXT_PUBLIC_BASE_PATH || ""; - /** @type {import('next').NextConfig} */ const nextConfig = { output: 'standalone', - basePath, - eslint: { ignoreDuringBuilds: true, }, @@ -18,8 +14,7 @@ const nextConfig = DB_PORT: process.env.DB_PORT || '5432', DB_USER: process.env.DB_USER || 'postgres', DB_PASSWORD: process.env.DB_PASSWORD || 'password', - DB_NAME: process.env.DB_NAME || 'postgres', - NEXT_PUBLIC_BASE_PATH: basePath + DB_NAME: process.env.DB_NAME || 'postgres' } }; diff --git a/gradesa/src/app/admin/create-exercise/click/page.js b/gradesa/src/app/admin/create-exercise/click/page.js index 434e393..a3cd954 100644 --- a/gradesa/src/app/admin/create-exercise/click/page.js +++ b/gradesa/src/app/admin/create-exercise/click/page.js @@ -8,7 +8,6 @@ import { Button } from "@/components/ui/button"; import useQuery from "@/shared/hooks/useQuery"; import "./click.css"; import WordSelectionExercise from "@/components/ui/click/click.js"; -import { withBasePath } from "@/shared/utils/basePath"; export default function CreateExercise() { const router = useRouter(); @@ -67,19 +66,16 @@ export default function CreateExercise() { const handleSaveExercise = async () => { try { if (isEditMode) { - const response = await fetch( - withBasePath(`/api/admin/exercises/click/${click_id}`), - { - method: "PUT", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - title, - targetCategory, - targetWords: selectedWords, - allWords, - }), - } - ); + const response = await fetch(`/api/admin/exercises/click/${click_id}`, { + method: "PUT", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + title, + targetCategory, + targetWords: selectedWords, + allWords, + }), + }); const data = await response.json(); if (!response.ok) { diff --git a/gradesa/src/app/admin/create-exercise/dnd-match/page.js b/gradesa/src/app/admin/create-exercise/dnd-match/page.js index 38505ef..3aa2ff7 100644 --- a/gradesa/src/app/admin/create-exercise/dnd-match/page.js +++ b/gradesa/src/app/admin/create-exercise/dnd-match/page.js @@ -5,7 +5,6 @@ import { useParams, useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Row } from "@/components/ui/layout/container"; import useQuery from "@/shared/hooks/useQuery"; -import { withBasePath } from "@/shared/utils/basePath"; import "./admin.css"; const EMPTY_PAIR = () => ({ leftItem: "", rightItem: "" }); @@ -91,26 +90,20 @@ export default function DndMatchAdminPage() { setIsSubmitting(true); if (isEditMode) { - const res = await fetch( - withBasePath(`/api/admin/exercises/dnd-match/${match_id}`), - { - method: "PUT", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(payload), - } - ); + const res = await fetch(`/api/admin/exercises/dnd-match/${match_id}`, { + method: "PUT", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }); const data = await res.json(); if (!res.ok) throw new Error(data.error || "Fehler beim Speichern."); router.push("/grammar/exercises/dnd-match"); } else { - const res = await fetch( - withBasePath("/api/admin/exercises/dnd-match"), - { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(payload), - } - ); + const res = await fetch(`/api/admin/exercises/dnd-match`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }); const data = await res.json(); if (!res.ok) throw new Error(data.error || "Fehler beim Erstellen."); router.push(`/grammar/exercises/dnd-match/${data.id}`); diff --git a/gradesa/src/app/admin/create-exercise/dragdrop/page.js b/gradesa/src/app/admin/create-exercise/dragdrop/page.js index f7e17e1..c7b32ec 100644 --- a/gradesa/src/app/admin/create-exercise/dragdrop/page.js +++ b/gradesa/src/app/admin/create-exercise/dragdrop/page.js @@ -9,7 +9,6 @@ import { useRequest } from "@/shared/hooks/useRequest"; import { useParams, useRouter } from "next/navigation"; import useQuery from "@/shared/hooks/useQuery"; import PreviewDragDrop from "@/components/ui/dragdrop/dragdrop_preview"; -import { withBasePath } from "@/shared/utils/basePath"; export default function DragdropAdminPage() { const { dnd_id } = useParams(); @@ -86,7 +85,7 @@ export default function DragdropAdminPage() { if (isEditMode) { const response = await fetch( - withBasePath(`/api/admin/exercises/dragdrop/${dnd_id}`), + `/api/admin/exercises/dragdrop/${dnd_id}`, { method: "PUT", headers: { "Content-Type": "application/json" }, diff --git a/gradesa/src/app/admin/create-exercise/free-form/[exercise_id]/edit/page.js b/gradesa/src/app/admin/create-exercise/free-form/[exercise_id]/edit/page.js index 0c1cc75..4023704 100644 --- a/gradesa/src/app/admin/create-exercise/free-form/[exercise_id]/edit/page.js +++ b/gradesa/src/app/admin/create-exercise/free-form/[exercise_id]/edit/page.js @@ -6,7 +6,6 @@ import { useEffect, useState } from "react"; import { useRouter, useParams } from "next/navigation"; import useQuery from "@/shared/hooks/useQuery"; import "../../../multichoice/multichoice.css"; -import { withBasePath } from "@/shared/utils/basePath"; export default function EditFreeFormExercisePage() { const router = useRouter(); @@ -131,7 +130,7 @@ export default function EditFreeFormExercisePage() { } const response = await fetch( - withBasePath(`/api/admin/exercises/free-form/${exercise_id}`), + `/api/admin/exercises/free-form/${exercise_id}`, { method: "PUT", headers: { diff --git a/gradesa/src/app/admin/create-exercise/multichoice/page.js b/gradesa/src/app/admin/create-exercise/multichoice/page.js index 5c3c95c..21aca19 100644 --- a/gradesa/src/app/admin/create-exercise/multichoice/page.js +++ b/gradesa/src/app/admin/create-exercise/multichoice/page.js @@ -4,7 +4,6 @@ import { useParams, useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import useQuery from "@/shared/hooks/useQuery"; import "./multichoice.css"; -import { withBasePath } from "@/shared/utils/basePath"; export default function CreateMultichoicePage() { const router = useRouter(); @@ -174,8 +173,8 @@ export default function CreateMultichoicePage() { }); const endpoint = isEditMode - ? withBasePath(`/api/admin/exercises/multichoice/${exercise_id}`) - : withBasePath("/api/admin/exercises/multichoice"); + ? `/api/admin/exercises/multichoice/${exercise_id}` + : `/api/admin/exercises/multichoice`; const res = await fetch(endpoint, { method: isEditMode ? "PUT" : "POST", diff --git a/gradesa/src/app/admin/edit-page/[type]/[slug]/editor-section.js b/gradesa/src/app/admin/edit-page/[type]/[slug]/editor-section.js index dc3402b..bf17175 100644 --- a/gradesa/src/app/admin/edit-page/[type]/[slug]/editor-section.js +++ b/gradesa/src/app/admin/edit-page/[type]/[slug]/editor-section.js @@ -6,7 +6,6 @@ import { Button } from "@/components/ui/button"; import Editor from "@/components/ui/editor"; import layout from "@/shared/styles/layout.module.css"; import { useRouter, useSearchParams } from "next/navigation"; -import { withBasePath } from "@/shared/utils/basePath"; export default function EditorSection({ initialContent, @@ -50,19 +49,16 @@ export default function EditorSection({ const jsonData = JSON.stringify(requestBody); if (!pageExists && type === "grammar") { - const createRes = await fetch( - withBasePath(`/api/admin/pages/${type}/${slug}`), - { - headers: { - Accept: "application/json", - "Content-Type": "application/json", - }, - method: "POST", - body: JSON.stringify({ - title: titleInput, - }), - } - ); + const createRes = await fetch(`/api/admin/pages/${type}/${slug}`, { + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + method: "POST", + body: JSON.stringify({ + title: titleInput, + }), + }); if (!createRes.ok && createRes.status !== 200) { setEditorMessage({ @@ -72,7 +68,7 @@ export default function EditorSection({ return; } } - const res = await fetch(withBasePath(`/api/admin/pages/${type}/${slug}`), { + const res = await fetch(`/api/admin/pages/${type}/${slug}`, { headers: { Accept: "application/json", "Content-Type": "application/json", diff --git a/gradesa/src/app/admin/glossary/create/page.js b/gradesa/src/app/admin/glossary/create/page.js index 790b31e..2cb1e6a 100644 --- a/gradesa/src/app/admin/glossary/create/page.js +++ b/gradesa/src/app/admin/glossary/create/page.js @@ -6,7 +6,6 @@ import { useRequest } from "@/shared/hooks/useRequest"; import { useRouter, useSearchParams } from "next/navigation"; import { zodErrorToFormErrors } from "@/shared/schemas/schema-utils"; import Editor from "@/components/ui/editor"; -import { withBasePath } from "@/shared/utils/basePath"; const defaultFormErrors = { word: "", @@ -32,9 +31,7 @@ export default function CreateGlossaryEntry() { const loadEntry = async () => { try { setIsLoadingEntry(true); - const response = await fetch( - withBasePath(`/api/admin/glossary?id=${entryId}`) - ); + const response = await fetch(`/api/admin/glossary?id=${entryId}`); if (!response.ok) { throw new Error("Failed to load glossary entry"); } diff --git a/gradesa/src/app/admin/new-page/page.js b/gradesa/src/app/admin/new-page/page.js index 1a936bd..0eb7ed3 100644 --- a/gradesa/src/app/admin/new-page/page.js +++ b/gradesa/src/app/admin/new-page/page.js @@ -5,7 +5,6 @@ import { Button } from "@/components/ui/button"; import layout from "@/shared/styles/layout.module.css"; import styles from "./new-page.module.css"; import { useRouter } from "next/navigation"; -import { withBasePath } from "@/shared/utils/basePath"; export default function NewPage() { const [type, setType] = useState("resources"); @@ -18,7 +17,7 @@ export default function NewPage() { useEffect(() => { if (type !== "grammar") return; - fetch(withBasePath("/api/admin/grammar-topics")) + fetch("/api/admin/grammar-topics") .then((res) => res.json()) .then((data) => { setGrammarTopics(data); @@ -50,7 +49,7 @@ export default function NewPage() { } } - const response = await fetch(withBasePath(`/api/admin/pages`), { + const response = await fetch(`/api/admin/pages`, { method: "POST", headers: { "Content-Type": "application/json", diff --git a/gradesa/src/app/edit_info/edit_email/page.js b/gradesa/src/app/edit_info/edit_email/page.js index c69b306..313a957 100644 --- a/gradesa/src/app/edit_info/edit_email/page.js +++ b/gradesa/src/app/edit_info/edit_email/page.js @@ -4,7 +4,6 @@ import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { Container } from "@/components/ui/layout/container"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export default function EditEmail() { const [user, setUser] = useState(""); @@ -17,7 +16,7 @@ export default function EditEmail() { useEffect(() => { const fetchCurrentUser = async () => { try { - const res = await fetch(withBasePath("/api/edit_email"), { + const res = await fetch("/api/edit_email", { method: "GET", }); if (res.ok) { @@ -44,7 +43,7 @@ export default function EditEmail() { return; } - const res = await fetch(withBasePath("/api/edit_email"), { + const res = await fetch("/api/edit_email", { method: "POST", headers: { "Content-Type": "application/json", diff --git a/gradesa/src/app/edit_info/edit_password/page.js b/gradesa/src/app/edit_info/edit_password/page.js index 33f9f84..f1b9af1 100644 --- a/gradesa/src/app/edit_info/edit_password/page.js +++ b/gradesa/src/app/edit_info/edit_password/page.js @@ -4,7 +4,6 @@ import { useState } from "react"; import { useRouter } from "next/navigation"; import { Container } from "@/components/ui/layout/container"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export default function EditPassword() { const [currentPassword, setCurrentPassword] = useState(""); @@ -25,7 +24,7 @@ export default function EditPassword() { return; } - const res = await fetch(withBasePath("/api/edit_password"), { + const res = await fetch("/api/edit_password", { method: "POST", headers: { "Content-Type": "application/json", diff --git a/gradesa/src/app/edit_info/page.js b/gradesa/src/app/edit_info/page.js index eef4d45..c6ce8e1 100644 --- a/gradesa/src/app/edit_info/page.js +++ b/gradesa/src/app/edit_info/page.js @@ -6,7 +6,6 @@ import styles from "../page.module.css"; import { Container } from "@/components/ui/layout/container"; import { LinkButton } from "@/components/ui/linkbutton"; import { Grid } from "@radix-ui/themes"; -import { withBasePath } from "@/shared/utils/basePath"; export default function EditInfo() { const [user, setUser] = useState(null); @@ -14,7 +13,7 @@ export default function EditInfo() { useEffect(() => { const getUser = async () => { - const res = await fetch(withBasePath("/api/edit_info")); + const res = await fetch("/api/edit_info"); if (res.status === 401) { router.replace("/auth/login"); diff --git a/gradesa/src/app/grammar/exercises/click/page.js b/gradesa/src/app/grammar/exercises/click/page.js index 39ceca5..6612d07 100644 --- a/gradesa/src/app/grammar/exercises/click/page.js +++ b/gradesa/src/app/grammar/exercises/click/page.js @@ -5,7 +5,6 @@ import { Container, Row, Column } from "@/components/ui/layout/container"; import useQuery from "@/shared/hooks/useQuery"; import { ExerciseLinkButton } from "@/components/ui/button/exercise-link-button"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export default function ClickExercisesPage() { const { @@ -21,12 +20,9 @@ export default function ClickExercisesPage() { if (!confirmed) return; try { - const response = await fetch( - withBasePath(`/api/admin/exercises/click/${exerciseId}`), - { - method: "DELETE", - } - ); + const response = await fetch(`/api/admin/exercises/click/${exerciseId}`, { + method: "DELETE", + }); if (!response.ok) { throw new Error("Fehler beim Löschen der Übung."); diff --git a/gradesa/src/app/grammar/exercises/dnd-match/page.js b/gradesa/src/app/grammar/exercises/dnd-match/page.js index bc3d0e8..b6f7b0c 100644 --- a/gradesa/src/app/grammar/exercises/dnd-match/page.js +++ b/gradesa/src/app/grammar/exercises/dnd-match/page.js @@ -5,7 +5,6 @@ import { Container, Row, Column } from "@/components/ui/layout/container"; import useQuery from "@/shared/hooks/useQuery"; import { ExerciseLinkButton } from "@/components/ui/button/exercise-link-button"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export default function DndMatchExercisesPage() { const { @@ -21,7 +20,7 @@ export default function DndMatchExercisesPage() { try { const response = await fetch( - withBasePath(`/api/admin/exercises/dnd-match/${exerciseId}`), + `/api/admin/exercises/dnd-match/${exerciseId}`, { method: "DELETE", } diff --git a/gradesa/src/app/grammar/exercises/dragdrop/page.js b/gradesa/src/app/grammar/exercises/dragdrop/page.js index dfdcb7a..ae55a53 100644 --- a/gradesa/src/app/grammar/exercises/dragdrop/page.js +++ b/gradesa/src/app/grammar/exercises/dragdrop/page.js @@ -5,7 +5,6 @@ import { Container, Row, Column } from "@/components/ui/layout/container"; import useQuery from "@/shared/hooks/useQuery"; import { ExerciseLinkButton } from "@/components/ui/button/exercise-link-button"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export default function DragdropExercisesPage() { const { @@ -22,7 +21,7 @@ export default function DragdropExercisesPage() { try { const response = await fetch( - withBasePath(`/api/admin/exercises/dragdrop/${exerciseId}`), + `/api/admin/exercises/dragdrop/${exerciseId}`, { method: "DELETE", } diff --git a/gradesa/src/app/grammar/exercises/fillinthegap/page.js b/gradesa/src/app/grammar/exercises/fillinthegap/page.js index 8b7dca8..80a8a7d 100644 --- a/gradesa/src/app/grammar/exercises/fillinthegap/page.js +++ b/gradesa/src/app/grammar/exercises/fillinthegap/page.js @@ -5,7 +5,6 @@ import { Container, Row, Column } from "@/components/ui/layout/container"; import useQuery from "@/shared/hooks/useQuery"; import { ExerciseLinkButton } from "@/components/ui/button/exercise-link-button"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export default function FillInTheGapExercisesPage() { const { @@ -22,7 +21,7 @@ export default function FillInTheGapExercisesPage() { try { const response = await fetch( - withBasePath(`/api/admin/exercises/fillinthegap/${exerciseId}`), + `/api/admin/exercises/fillinthegap/${exerciseId}`, { method: "DELETE", } diff --git a/gradesa/src/app/grammar/exercises/freeform/page.js b/gradesa/src/app/grammar/exercises/freeform/page.js index 4a1e5ac..8730acb 100644 --- a/gradesa/src/app/grammar/exercises/freeform/page.js +++ b/gradesa/src/app/grammar/exercises/freeform/page.js @@ -5,7 +5,6 @@ import { Container, Row, Column } from "@/components/ui/layout/container"; import useQuery from "@/shared/hooks/useQuery"; import { ExerciseLinkButton } from "@/components/ui/button/exercise-link-button"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export default function FreeFormExercisesPage() { const { @@ -22,7 +21,7 @@ export default function FreeFormExercisesPage() { try { const response = await fetch( - withBasePath(`/api/admin/exercises/free-form/${exerciseId}`), + `/api/admin/exercises/free-form/${exerciseId}`, { method: "DELETE", } diff --git a/gradesa/src/app/grammar/exercises/multichoice/page.js b/gradesa/src/app/grammar/exercises/multichoice/page.js index 175b18b..a764724 100644 --- a/gradesa/src/app/grammar/exercises/multichoice/page.js +++ b/gradesa/src/app/grammar/exercises/multichoice/page.js @@ -5,7 +5,6 @@ import { Container, Column, Row } from "@/components/ui/layout/container"; import useQuery from "@/shared/hooks/useQuery"; import { ExerciseLinkButton } from "@/components/ui/button/exercise-link-button"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export default function MultichoiceExercisesPage() { const { @@ -22,7 +21,7 @@ export default function MultichoiceExercisesPage() { try { const response = await fetch( - withBasePath(`/api/admin/exercises/multichoice/${exerciseId}`), + `/api/admin/exercises/multichoice/${exerciseId}`, { method: "DELETE", } diff --git a/gradesa/src/app/pages/[type]/[slug]/admin-buttons.js b/gradesa/src/app/pages/[type]/[slug]/admin-buttons.js index 205a577..4983383 100644 --- a/gradesa/src/app/pages/[type]/[slug]/admin-buttons.js +++ b/gradesa/src/app/pages/[type]/[slug]/admin-buttons.js @@ -6,7 +6,6 @@ import { useRouter } from "next/navigation"; import { useUser } from "@/context/user.context"; import { Row } from "@/components/ui/layout/container"; import { useSearchParams } from "next/navigation"; -import { withBasePath } from "@/shared/utils/basePath"; export default function AdminButtons({ type, slug, pageExists = true }) { const { setActAs } = useUser(); @@ -18,7 +17,7 @@ export default function AdminButtons({ type, slug, pageExists = true }) { const handleReset = async () => { if (!confirm("Möchten Sie den Inhalt dieser Seite wirklich leeren?")) return; - const res = await fetch(withBasePath(`/api/admin/pages/${type}/${slug}`), { + const res = await fetch(`/api/admin/pages/${type}/${slug}`, { method: "PATCH", }); @@ -64,7 +63,7 @@ export default function AdminButtons({ type, slug, pageExists = true }) { } else if (type === "resources") { redirectPath = "/learning"; // fallback try { - const listRes = await fetch(withBasePath(`/api/pages/${type}`)); + const listRes = await fetch(`/api/pages/${type}`); if (listRes.ok) { const data = await listRes.json(); const pages = Array.isArray(data?.pages) ? data.pages : []; @@ -83,7 +82,7 @@ export default function AdminButtons({ type, slug, pageExists = true }) { redirectPath = getFallbackPath(type); } - const res = await fetch(withBasePath(`/api/admin/pages/${type}/${slug}`), { + const res = await fetch(`/api/admin/pages/${type}/${slug}`, { method: "DELETE", }); diff --git a/gradesa/src/app/talkback/page.js b/gradesa/src/app/talkback/page.js index dd59aed..700a494 100644 --- a/gradesa/src/app/talkback/page.js +++ b/gradesa/src/app/talkback/page.js @@ -3,7 +3,6 @@ import "./talkback.css"; import { useState } from "react"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export default function TalkbackPage() { const defaultSubject = "Rückmeldung von GRADESA 2.0"; @@ -45,7 +44,7 @@ export default function TalkbackPage() { try { setIsSending(true); - const response = await fetch(withBasePath("/api/talkback"), { + const response = await fetch("/api/talkback", { method: "POST", headers: { "Content-Type": "application/json", diff --git a/gradesa/src/components/ui/button/exercise-link-button.js b/gradesa/src/components/ui/button/exercise-link-button.js index db7d7d5..29a8576 100644 --- a/gradesa/src/components/ui/button/exercise-link-button.js +++ b/gradesa/src/components/ui/button/exercise-link-button.js @@ -1,6 +1,5 @@ "use client"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; export function ExerciseLinkButton({ href, children, ...props }) { const copyToClipboard = async (e) => { @@ -8,7 +7,7 @@ export function ExerciseLinkButton({ href, children, ...props }) { e.stopPropagation(); try { const origin = window.location.origin; - const url = `${origin}${withBasePath(href)}`; + const url = `${origin}${href}`; await navigator.clipboard.writeText(url); alert("Link kopiert!"); return true; diff --git a/gradesa/src/components/ui/dnd-match/MatchArea.js b/gradesa/src/components/ui/dnd-match/MatchArea.js index b50dddc..5da79e6 100644 --- a/gradesa/src/components/ui/dnd-match/MatchArea.js +++ b/gradesa/src/components/ui/dnd-match/MatchArea.js @@ -7,7 +7,6 @@ import { MatchCard } from "./MatchCard"; import { MatchSlot } from "./MatchSlot"; import { Button } from "@/components/ui/button"; import "./dnd-match.css"; -import { withBasePath } from "@/shared/utils/basePath"; function shuffle(arr) { const a = [...arr]; @@ -110,7 +109,7 @@ const MatchAreaInner = ({ exercise, exerciseId }) => { })); const res = await fetch( - withBasePath(`/api/exercises/dnd-match/${exerciseId}/answers`), + `/api/exercises/dnd-match/${exerciseId}/answers`, { method: "POST", headers: { "Content-Type": "application/json" }, diff --git a/gradesa/src/components/ui/dragdrop/area.js b/gradesa/src/components/ui/dragdrop/area.js index 45a0391..65fa6f5 100644 --- a/gradesa/src/components/ui/dragdrop/area.js +++ b/gradesa/src/components/ui/dragdrop/area.js @@ -2,7 +2,6 @@ import { memo, useCallback, useState, useEffect } from "react"; import { WordBox } from "./wordbox.js"; import { Dustbin } from "./dustbin.js"; import { Button } from "@/components/ui/button"; -import { withBasePath } from "@/shared/utils/basePath"; const Area = ({ exerciseID }) => { const [dustbins, setDustbins] = useState([]); @@ -23,9 +22,7 @@ const Area = ({ exerciseID }) => { if (!exerciseID) return; try { - const response = await fetch( - withBasePath(`/api/exercises/dragdrop/${exerciseID}`) - ); + const response = await fetch(`/api/exercises/dragdrop/${exerciseID}`); if (!response.ok) throw new Error("Fehler beim Laden der Übung."); const data = await response.json(); diff --git a/gradesa/src/components/ui/render-html/render-html.jsx b/gradesa/src/components/ui/render-html/render-html.jsx index 53436ac..66e4b00 100644 --- a/gradesa/src/components/ui/render-html/render-html.jsx +++ b/gradesa/src/components/ui/render-html/render-html.jsx @@ -5,7 +5,6 @@ import { GlossaryParagraph, GlossaryListItem, } from "@/components/ui/glossary/GlossaryText"; -import { BASE_PATH, withBasePath } from "@/shared/utils/basePath"; /** * Normalize HTML attributes for use in React elements. @@ -35,15 +34,6 @@ const normalizeAttribs = (attributes = {}) => { return normalized; }; -const prefixRootRelativePath = (value) => { - if (typeof value !== "string") return value; - if (!value.startsWith("/") || value.startsWith("//")) return value; - if (BASE_PATH && (value === BASE_PATH || value.startsWith(`${BASE_PATH}/`))) { - return value; - } - return withBasePath(value); -}; - /** * RenderHTML * @@ -94,25 +84,11 @@ export default function RenderHTML({ data, disableGlossary = false }) { // Legacy DB content can contain tags from old React markup. // Render only children to preserve previous look without invalid tag warnings. container: (_attributes, children) => {children}, - a: (attributes, children) => { - const safeAttribs = { ...attributes }; - if (safeAttribs.href) { - safeAttribs.href = prefixRootRelativePath(safeAttribs.href); - } - return {children}; - }, - img: (attributes) => { - const safeAttribs = { ...attributes }; - if (safeAttribs.src) { - safeAttribs.src = prefixRootRelativePath(safeAttribs.src); - } - return ; - }, anchor: (attributes, children) => { const safeAttribs = { ...attributes }; const href = safeAttribs.href || safeAttribs["data-href"]; if (href) { - safeAttribs["data-href"] = prefixRootRelativePath(href); + safeAttribs["data-href"] = href; delete safeAttribs.href; } safeAttribs.className = [safeAttribs.className, "glossary-anchor"] diff --git a/gradesa/src/components/ui/sidebar/sidebar.js b/gradesa/src/components/ui/sidebar/sidebar.js index bcec0a9..013bdc7 100644 --- a/gradesa/src/components/ui/sidebar/sidebar.js +++ b/gradesa/src/components/ui/sidebar/sidebar.js @@ -14,7 +14,6 @@ import { import { Button } from "../button"; import { useEffect, useState } from "react"; import { useIsMounted } from "@/shared/hooks/useIsMounted"; -import { withBasePath } from "@/shared/utils/basePath"; const Sidebar = () => { const { auth, setActAs, actAs } = useUser(); @@ -80,7 +79,7 @@ function StudentSideBar() { const pathname = usePathname(); useEffect(() => { - fetch(withBasePath("/api/pages/resources")) + fetch("/api/pages/resources") .then((res) => res.json()) .then((data) => { setChapters( diff --git a/gradesa/src/shared/hooks/useQuery.js b/gradesa/src/shared/hooks/useQuery.js index 6aa9c34..fb61884 100644 --- a/gradesa/src/shared/hooks/useQuery.js +++ b/gradesa/src/shared/hooks/useQuery.js @@ -4,10 +4,9 @@ import { useState, useEffect, useRef, useMemo, memo } from "react"; import { useIsMounted } from "./useIsMounted"; import { useUser } from "@/context/user.context"; import { useSessionId } from "./useSessionId"; -import { withBasePath } from "@/shared/utils/basePath"; export const axiosInstance = axios.create({ - baseURL: withBasePath("/api"), + baseURL: "/api", }); /** diff --git a/gradesa/src/shared/utils/basePath.js b/gradesa/src/shared/utils/basePath.js deleted file mode 100644 index 9cbfa78..0000000 --- a/gradesa/src/shared/utils/basePath.js +++ /dev/null @@ -1,6 +0,0 @@ -export const BASE_PATH = process.env.NEXT_PUBLIC_BASE_PATH || ""; - -export function withBasePath(path) { - if (!path.startsWith("/")) return path; - return `${BASE_PATH}${path}`; -}