Update dependencies and refactor routing: Upgrade Tiptap extensions to version 3.22.2 in package.json and package-lock.json. Enhance router configuration by introducing route names for better maintainability and adding new core routes for home, terms, and privacy policy. Adjust HTML asset references for improved loading efficiency.

This commit is contained in:
Torsten Schulz (local)
2026-04-08 09:34:51 +02:00
parent 597c8ceffe
commit 80eef53670
94 changed files with 711 additions and 283 deletions

View File

@@ -1,12 +1,35 @@
import { createRouter, createWebHistory } from 'vue-router';
import store from './store';
const ROUTE_NAMES = {
ADMIN_EDIT_PAGES: 'admin-edit-pages',
REGISTER: 'register',
FORGOT_PASSWORD: 'forgot-password',
RESET_PASSWORD: 'reset-password',
AUTH_LOGIN: 'auth-login',
HOME: 'home',
TERMS: 'terms',
PRIVACY_POLICY: 'privacy-policy',
NOT_FOUND: 'not-found',
};
// Vite kann `import(\`./content/${name}.vue\`)` nicht zuverlässig auflösen.
// Daher bauen wir eine statische Import-Matrix über import.meta.glob.
const contentModules = import.meta.glob('./content/**/*.vue');
function loadComponent(componentName) {
return () => {
if (!componentName) {
return import('./content/DefaultComponent.vue');
return async () => {
const normalized = componentName || 'DefaultComponent';
const key = `./content/${normalized}.vue`;
const loader = contentModules[key];
if (!loader) {
// Fallback, falls DB/Backend einen unbekannten Komponenten-Namen liefert.
const fallback = contentModules['./content/DefaultComponent.vue'];
return fallback ? fallback() : import('./content/DefaultComponent.vue');
}
return import(`./content/${componentName}.vue`);
return loader();
};
}
@@ -60,23 +83,23 @@ router.beforeEach(async (to, from, next) => {
addForgotPasswordRoute();
addResetPasswordRoute();
addAuthLoginRoute();
const fallbackMain = store.state.menuLoadError
? 'ServiceUnavailableComponent'
: 'DefaultComponent';
router.addRoute({
path: '/:pathMatch(.*)*',
components: {
default: loadComponent(fallbackMain),
rightColumn: loadComponent('ImageContent')
}
});
// NotFound-Route existiert bereits als Core-Route; bei DB-Ausfall aktualisieren wir sie.
if (store.state.menuLoadError && router.hasRoute(ROUTE_NAMES.NOT_FOUND)) {
router.removeRoute(ROUTE_NAMES.NOT_FOUND);
router.addRoute({
path: '/:pathMatch(.*)*',
components: {
default: loadComponent('ServiceUnavailableComponent'),
rightColumn: loadComponent('ImageContent')
},
name: ROUTE_NAMES.NOT_FOUND
});
}
next({ ...to, replace: true });
} else {
// Sicherstellen, dass die Login-Route immer verfügbar ist
if (!router.hasRoute('auth-login')) {
addAuthLoginRoute();
}
// Sicherstellen, dass Kernrouten immer verfügbar sind
ensureCoreRoutes();
if (to.matched.some(record => record.meta.requiresAuth) && !store.getters.isLoggedIn) {
next('/auth/login');
} else {
@@ -86,8 +109,8 @@ router.beforeEach(async (to, from, next) => {
});
function addEditPagesRoute() {
if (router.hasRoute('/admin/edit-pages')) {
router.removeRoute('/admin/edit-pages');
if (router.hasRoute(ROUTE_NAMES.ADMIN_EDIT_PAGES)) {
router.removeRoute(ROUTE_NAMES.ADMIN_EDIT_PAGES);
}
router.addRoute({
path: '/admin/edit-pages',
@@ -95,13 +118,13 @@ function addEditPagesRoute() {
default: loadComponent('admin/PagePreviewComponent'),
rightColumn: loadComponent('admin/EditPagesComponent')
},
name: 'admin-edit-pages'
name: ROUTE_NAMES.ADMIN_EDIT_PAGES
});
}
function addRegisterRoute() {
if (router.hasRoute('/register')) {
router.removeRoute('/register');
if (router.hasRoute(ROUTE_NAMES.REGISTER)) {
router.removeRoute(ROUTE_NAMES.REGISTER);
}
router.addRoute({
path: '/register',
@@ -109,13 +132,13 @@ function addRegisterRoute() {
default: () => import('./content/authentication/RegisterContent.vue'),
rightColumn: loadComponent('ImageContent')
},
name: 'register'
name: ROUTE_NAMES.REGISTER
});
}
function addForgotPasswordRoute() {
if (router.hasRoute('/forgot-password')) {
router.removeRoute('/forgot-password');
if (router.hasRoute(ROUTE_NAMES.FORGOT_PASSWORD)) {
router.removeRoute(ROUTE_NAMES.FORGOT_PASSWORD);
}
router.addRoute({
path: '/forgot-password',
@@ -123,13 +146,13 @@ function addForgotPasswordRoute() {
default: () => import('./content/authentication/ForgotPasswordContent.vue'),
rightColumn: loadComponent('ImageContent')
},
name: 'forgot-password'
name: ROUTE_NAMES.FORGOT_PASSWORD
});
}
function addResetPasswordRoute() {
if (router.hasRoute('/reset-password')) {
router.removeRoute('/reset-password');
if (router.hasRoute(ROUTE_NAMES.RESET_PASSWORD)) {
router.removeRoute(ROUTE_NAMES.RESET_PASSWORD);
}
router.addRoute({
path: '/reset-password',
@@ -137,13 +160,13 @@ function addResetPasswordRoute() {
default: () => import('./content/authentication/ResetPasswordContent.vue'),
rightColumn: loadComponent('ImageContent')
},
name: 'reset-password'
name: ROUTE_NAMES.RESET_PASSWORD
});
}
function addAuthLoginRoute() {
if (router.hasRoute('/auth/login')) {
router.removeRoute('/auth/login');
if (router.hasRoute(ROUTE_NAMES.AUTH_LOGIN)) {
router.removeRoute(ROUTE_NAMES.AUTH_LOGIN);
}
router.addRoute({
path: '/auth/login',
@@ -151,14 +174,86 @@ function addAuthLoginRoute() {
default: () => import('./content/authentication/LoginContent.vue'),
rightColumn: loadComponent('ImageContent')
},
name: 'auth-login'
name: ROUTE_NAMES.AUTH_LOGIN
});
}
function addHomeRoute() {
if (router.hasRoute(ROUTE_NAMES.HOME)) {
router.removeRoute(ROUTE_NAMES.HOME);
}
router.addRoute({
path: '/',
components: {
default: loadComponent('DefaultContent'),
rightColumn: loadComponent('ImageContent')
},
name: ROUTE_NAMES.HOME
});
}
function addTermsRoute() {
if (router.hasRoute(ROUTE_NAMES.TERMS)) {
router.removeRoute(ROUTE_NAMES.TERMS);
}
router.addRoute({
path: '/terms',
components: {
default: () => import('./content/disclaimers/TermsComponent.vue'),
rightColumn: loadComponent('ImageContent')
},
name: ROUTE_NAMES.TERMS
});
}
function addPrivacyPolicyRoute() {
if (router.hasRoute(ROUTE_NAMES.PRIVACY_POLICY)) {
router.removeRoute(ROUTE_NAMES.PRIVACY_POLICY);
}
router.addRoute({
path: '/privacy-policy',
components: {
default: () => import('./content/disclaimers/PrivacyPolicyComponent.vue'),
rightColumn: loadComponent('ImageContent')
},
name: ROUTE_NAMES.PRIVACY_POLICY
});
}
function ensureNotFoundRoute() {
// Catch-All nur einmal registrieren (sonst Doppelrouten/unklares Matching)
if (router.hasRoute(ROUTE_NAMES.NOT_FOUND)) return;
router.addRoute({
path: '/:pathMatch(.*)*',
components: {
default: loadComponent('DefaultComponent'),
rightColumn: loadComponent('ImageContent')
},
name: ROUTE_NAMES.NOT_FOUND
});
}
function ensureCoreRoutes() {
if (!router.hasRoute(ROUTE_NAMES.ADMIN_EDIT_PAGES)) addEditPagesRoute();
if (!router.hasRoute(ROUTE_NAMES.REGISTER)) addRegisterRoute();
if (!router.hasRoute(ROUTE_NAMES.FORGOT_PASSWORD)) addForgotPasswordRoute();
if (!router.hasRoute(ROUTE_NAMES.RESET_PASSWORD)) addResetPasswordRoute();
if (!router.hasRoute(ROUTE_NAMES.AUTH_LOGIN)) addAuthLoginRoute();
if (!router.hasRoute(ROUTE_NAMES.HOME)) addHomeRoute();
if (!router.hasRoute(ROUTE_NAMES.TERMS)) addTermsRoute();
if (!router.hasRoute(ROUTE_NAMES.PRIVACY_POLICY)) addPrivacyPolicyRoute();
ensureNotFoundRoute();
}
addEditPagesRoute();
addRegisterRoute();
addForgotPasswordRoute();
addResetPasswordRoute();
addAuthLoginRoute();
addHomeRoute();
addTermsRoute();
addPrivacyPolicyRoute();
ensureNotFoundRoute();
export default router;