Switch termine loading from static CSV to dynamic API for instant updates

This commit is contained in:
Torsten Schulz (local)
2025-10-21 16:21:01 +02:00
parent 4af0b2a448
commit c35cdcfcc9
17 changed files with 801 additions and 727 deletions

View File

@@ -340,7 +340,7 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "BCCaC8ND.js",
"file": "B5GgiMm1.js",
"name": "entry",
"src": "node_modules/nuxt/dist/app/entry.js",
"isEntry": true,
@@ -350,14 +350,14 @@ const client_manifest = {
"node_modules/nuxt/dist/app/components/error-500.vue"
],
"css": [
"entry.BiMUV0e6.css"
"entry.BFpxHKmh.css"
],
"assets": [
"Harheimer TC.CKfYAfp1.svg"
]
},
"entry.BiMUV0e6.css": {
"file": "entry.BiMUV0e6.css",
"entry.BFpxHKmh.css": {
"file": "entry.BFpxHKmh.css",
"resourceType": "style",
"prefetch": true,
"preload": true

View File

@@ -1,10 +1,10 @@
import process from 'node:process';globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import { defineComponent, shallowRef, h, resolveComponent, hasInjectionContext, inject, computed, getCurrentInstance, createElementBlock, provide, cloneVNode, ref, Suspense, Fragment, createApp, shallowReactive, mergeProps, unref, withCtx, createTextVNode, toRef, onErrorCaptured, onServerPrefetch, createVNode, resolveDynamicComponent, reactive, effectScope, isReadonly, isRef, isShallow, isReactive, toRaw, defineAsyncComponent, getCurrentScope, toDisplayString, useSSRContext } from 'vue';
import process from 'node:process';globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import { defineComponent, shallowRef, h, resolveComponent, hasInjectionContext, inject, computed, getCurrentInstance, createElementBlock, provide, cloneVNode, ref, Suspense, Fragment, createApp, shallowReactive, mergeProps, withCtx, createVNode, createTextVNode, unref, toDisplayString, toRef, onErrorCaptured, onServerPrefetch, resolveDynamicComponent, reactive, effectScope, isReadonly, isRef, isShallow, isReactive, toRaw, defineAsyncComponent, getCurrentScope, useSSRContext } from 'vue';
import { p as parseQuery, c as createError$1, o as hasProtocol, q as isScriptProtocol, m as joinURL, w as withQuery, t as sanitizeStatusCode, v as withTrailingSlash, x as withoutTrailingSlash, y as getContext, $ as $fetch$1, z as createHooks, A as executeAsync, B as toRouteMatcher, C as createRouter$1, D as defu } from '../nitro/nitro.mjs';
import { b as baseURL } from '../routes/renderer.mjs';
import { defineStore, createPinia, setActivePinia, shouldHydrate } from 'pinia';
import { RouterView, useRouter as useRouter$1, createMemoryHistory, createRouter, START_LOCATION, useRoute as useRoute$1 } from 'vue-router';
import { ssrRenderAttrs, ssrInterpolate, ssrRenderComponent, ssrRenderSuspense, ssrRenderVNode, ssrRenderAttr, ssrRenderStyle, ssrRenderClass, ssrRenderList } from 'vue/server-renderer';
import { User, ChevronUp, X, Menu, ChevronDown } from 'lucide-vue-next';
import { RouterView, useRoute as useRoute$1, useRouter as useRouter$1, createMemoryHistory, createRouter, START_LOCATION } from 'vue-router';
import { ssrRenderAttrs, ssrRenderComponent, ssrRenderAttr, ssrRenderStyle, ssrRenderClass, ssrRenderList, ssrInterpolate, ssrRenderSuspense, ssrRenderVNode } from 'vue/server-renderer';
import { ChevronDown, X, Menu, User, ChevronUp } from 'lucide-vue-next';
import 'node:http';
import 'node:https';
import 'node:events';
@@ -1414,6 +1414,7 @@ const _sfc_main$4 = {
const mobileSubmenu = ref(null);
const mannschaften = ref([]);
const hasGalleryImages = ref(false);
const showCmsDropdown = ref(false);
const isLoggedIn = computed(() => authStore.isLoggedIn);
const isAdmin = computed(() => authStore.isAdmin);
const currentSubmenu = computed(() => {
@@ -1855,40 +1856,99 @@ const _sfc_main$4 = {
_: 1
}, _parent));
if (isAdmin.value) {
_push(`<!--[--><div class="h-3 w-px bg-primary-700"></div>`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/cms",
class: "px-2.5 py-1 text-xs text-yellow-300 hover:text-white hover:bg-primary-700/50 rounded transition-all",
"active-class": "text-white bg-primary-600"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` CMS `);
} else {
return [
createTextVNode(" CMS ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/cms/benutzer",
class: "px-2.5 py-1 text-xs text-yellow-300 hover:text-white hover:bg-primary-700/50 rounded transition-all",
"active-class": "text-white bg-primary-600"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Benutzerverwaltung `);
} else {
return [
createTextVNode(" Benutzerverwaltung ")
];
}
}),
_: 1
}, _parent));
_push(`<!--]-->`);
_push(`<!--[--><div class="h-3 w-px bg-primary-700"></div><div class="relative inline-block"><button class="${ssrRenderClass([unref(route).path.startsWith("/cms") ? "text-white bg-primary-600" : "", "px-2.5 py-1 text-xs text-yellow-300 hover:text-white hover:bg-primary-700/50 rounded transition-all flex items-center"])}"> CMS `);
_push(ssrRenderComponent(unref(ChevronDown), {
size: 12,
class: ["ml-1", ["transition-transform", showCmsDropdown.value ? "rotate-180" : ""]]
}, null, _parent));
_push(`</button>`);
if (showCmsDropdown.value) {
_push(`<div class="absolute left-0 top-full mt-1 w-48 bg-gray-800 border border-gray-700 rounded-lg shadow-xl overflow-hidden z-50">`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/cms",
onClick: ($event) => showCmsDropdown.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Übersicht `);
} else {
return [
createTextVNode(" Übersicht ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/mitgliederbereich/news",
onClick: ($event) => showCmsDropdown.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Interne News `);
} else {
return [
createTextVNode(" Interne News ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/cms/termine",
onClick: ($event) => showCmsDropdown.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Termine `);
} else {
return [
createTextVNode(" Termine ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/mitgliederbereich/mitglieder",
onClick: ($event) => showCmsDropdown.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Mitglieder `);
} else {
return [
createTextVNode(" Mitglieder ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/cms/benutzer",
onClick: ($event) => showCmsDropdown.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Benutzerverwaltung `);
} else {
return [
createTextVNode(" Benutzerverwaltung ")
];
}
}),
_: 1
}, _parent));
_push(`</div>`);
} else {
_push(`<!---->`);
}
_push(`</div><!--]-->`);
} else {
_push(`<!---->`);
}
@@ -2310,14 +2370,62 @@ const _sfc_main$4 = {
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/cms",
onClick: ($event) => isMobileMenuOpen.value = false,
class: "block px-4 py-2 text-sm font-semibold text-yellow-300 hover:text-white hover:bg-primary-700/50 rounded-lg transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` CMS Übersicht `);
} else {
return [
createTextVNode(" CMS Übersicht ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/mitgliederbereich/news",
onClick: ($event) => isMobileMenuOpen.value = false,
class: "block px-4 py-2 text-sm text-yellow-300 hover:text-white hover:bg-primary-700/50 rounded-lg transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` CMS `);
_push2(` Interne News `);
} else {
return [
createTextVNode(" CMS ")
createTextVNode(" Interne News ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/cms/termine",
onClick: ($event) => isMobileMenuOpen.value = false,
class: "block px-4 py-2 text-sm text-yellow-300 hover:text-white hover:bg-primary-700/50 rounded-lg transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Termine `);
} else {
return [
createTextVNode(" Termine ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/mitgliederbereich/mitglieder",
onClick: ($event) => isMobileMenuOpen.value = false,
class: "block px-4 py-2 text-sm text-yellow-300 hover:text-white hover:bg-primary-700/50 rounded-lg transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Mitglieder `);
} else {
return [
createTextVNode(" Mitglieder ")
];
}
}),
@@ -2381,6 +2489,7 @@ _sfc_main$4.setup = (props, ctx) => {
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/Navigation.vue");
return _sfc_setup$4 ? _sfc_setup$4(props, ctx) : void 0;
};
const Navigation = Object.assign(_sfc_main$4, { __name: "Navigation" });
const _sfc_main$3 = {
__name: "Footer",
__ssrInlineRender: true,
@@ -2511,7 +2620,7 @@ const _sfc_main$2 = {
return (_ctx, _push, _parent, _attrs) => {
const _component_NuxtPage = __nuxt_component_0;
_push(`<div${ssrRenderAttrs(mergeProps({ class: "h-screen flex flex-col overflow-hidden" }, _attrs))}>`);
_push(ssrRenderComponent(_sfc_main$4, null, null, _parent));
_push(ssrRenderComponent(Navigation, null, null, _parent));
_push(`<main class="flex-1 overflow-y-auto pt-20">`);
_push(ssrRenderComponent(_component_NuxtPage, null, null, _parent));
_push(`</main>`);

File diff suppressed because it is too large Load Diff

View File

@@ -272,7 +272,7 @@ async function renderInlineStyles(usedModules) {
const renderSSRHeadOptions = {"omitLineBreaks":true};
const entryFileName = "BCCaC8ND.js";
const entryFileName = "B5GgiMm1.js";
globalThis.__buildAssetsURL = buildAssetsURL;
globalThis.__publicAssetsURL = publicAssetsURL;