diff --git a/Dockerfile b/Dockerfile
index d20cf643f..3fb4fddb3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,6 +13,7 @@ ENV NEXT_TELEMETRY_DISABLED=1
# NEXT_PUBLIC_* vars are baked into the Next.js build at compile time.
# Pass them as build args so the same Dockerfile works for any environment.
+ARG NEXT_PUBLIC_CI=false
ARG NEXT_PUBLIC_SITE_URL=https://myeasycms.de
ARG NEXT_PUBLIC_SUPABASE_URL=http://localhost:8000
ARG NEXT_PUBLIC_SUPABASE_PUBLIC_KEY
@@ -20,6 +21,7 @@ ARG NEXT_PUBLIC_DEFAULT_LOCALE=de
ARG NEXT_PUBLIC_ENABLE_FISCHEREI=true
ARG NEXT_PUBLIC_ENABLE_MEETING_PROTOCOLS=true
ARG NEXT_PUBLIC_ENABLE_VERBANDSVERWALTUNG=true
+ENV NEXT_PUBLIC_CI=${NEXT_PUBLIC_CI}
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL}
ENV NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL}
ENV NEXT_PUBLIC_SUPABASE_PUBLIC_KEY=${NEXT_PUBLIC_SUPABASE_PUBLIC_KEY}
diff --git a/apps/e2e/tests/course-enrollment.spec.ts b/apps/e2e/tests/course-enrollment.spec.ts
index 5d874d7c2..ed2c72ca7 100644
--- a/apps/e2e/tests/course-enrollment.spec.ts
+++ b/apps/e2e/tests/course-enrollment.spec.ts
@@ -1,11 +1,11 @@
/**
* E2E Test: Course Enrollment
*/
-import { test, expect } from '@playwright/test';
+import { test } from '@playwright/test';
test.describe('Course Management', () => {
test('create course, enroll participant, check capacity, waitlist', async ({
- page,
+ page: _page,
}) => {
// Create course with capacity 2
// Enroll participant 1 → status: enrolled
@@ -13,13 +13,13 @@ test.describe('Course Management', () => {
// Enroll participant 3 → status: waitlisted (capacity full)
});
- test('course calendar view shows sessions', async ({ page }) => {
+ test('course calendar view shows sessions', async ({ page: _page }) => {
// Create course with sessions
// Navigate to calendar
// Verify sessions visible
});
- test('attendance tracking', async ({ page }) => {
+ test('attendance tracking', async ({ page: _page }) => {
// Create course + session + participants
// Mark attendance
// Verify attendance persists
diff --git a/apps/e2e/tests/member-lifecycle.spec.ts b/apps/e2e/tests/member-lifecycle.spec.ts
index bff3e6ebe..17cfe00a1 100644
--- a/apps/e2e/tests/member-lifecycle.spec.ts
+++ b/apps/e2e/tests/member-lifecycle.spec.ts
@@ -4,7 +4,7 @@
import { test, expect } from '@playwright/test';
test.describe('Member Management', () => {
- test('create member, edit, search, filter by status', async ({ page }) => {
+ test('create member, edit, search, filter by status', async ({ page: _page }) => {
await page.goto('/auth/sign-in');
await page.fill('input[name="email"]', 'test@example.com');
await page.fill('input[name="password"]', 'testpassword123');
@@ -16,14 +16,14 @@ test.describe('Member Management', () => {
});
test('application workflow: submit → review → approve → member created', async ({
- page,
+ page: _page,
}) => {
// Submit application
// Review application
// Approve → verify member auto-created
});
- test('SEPA mandate management', async ({ page }) => {
+ test('SEPA mandate management', async ({ page: _page }) => {
// Create member with IBAN
// Verify IBAN validation
// Create SEPA batch from dues
diff --git a/apps/e2e/tests/module-builder.spec.ts b/apps/e2e/tests/module-builder.spec.ts
index 831923127..075ec235b 100644
--- a/apps/e2e/tests/module-builder.spec.ts
+++ b/apps/e2e/tests/module-builder.spec.ts
@@ -5,7 +5,7 @@ import { test, expect } from '@playwright/test';
test.describe('Module Builder', () => {
test('create module, add fields, insert record, query, update, soft-delete', async ({
- page,
+ page: _page,
}) => {
// Login
await page.goto('/auth/sign-in');
@@ -24,7 +24,7 @@ test.describe('Module Builder', () => {
});
test.describe('Cross-tenant isolation', () => {
- test('tenant A cannot see tenant B data', async ({ page }) => {
+ test('tenant A cannot see tenant B data', async ({ page: _page }) => {
// Login as tenant A user
// Verify can see own modules
// Verify cannot access tenant B module URL
diff --git a/apps/e2e/tests/newsletter.spec.ts b/apps/e2e/tests/newsletter.spec.ts
index 2a0fef5c2..c8fa1e182 100644
--- a/apps/e2e/tests/newsletter.spec.ts
+++ b/apps/e2e/tests/newsletter.spec.ts
@@ -1,11 +1,11 @@
/**
* E2E Test: Newsletter
*/
-import { test, expect } from '@playwright/test';
+import { test } from '@playwright/test';
test.describe('Newsletter', () => {
test('create campaign, select recipients from members, preview, send', async ({
- page,
+ page: _page,
}) => {
// Create newsletter
// Add recipients from member filter (status=active, hasEmail=true)
@@ -14,7 +14,7 @@ test.describe('Newsletter', () => {
// Verify sent_count
});
- test('template variable substitution works', async ({ page }) => {
+ test('template variable substitution works', async ({ page: _page }) => {
// Create template with {{first_name}} {{member_number}}
// Create newsletter from template
// Preview — verify variables replaced
diff --git a/apps/e2e/tests/sepa-batch.spec.ts b/apps/e2e/tests/sepa-batch.spec.ts
index 3519b6c21..b51e96760 100644
--- a/apps/e2e/tests/sepa-batch.spec.ts
+++ b/apps/e2e/tests/sepa-batch.spec.ts
@@ -1,11 +1,11 @@
/**
* E2E Test: SEPA Batch Processing
*/
-import { test, expect } from '@playwright/test';
+import { test } from '@playwright/test';
test.describe('SEPA / Finance', () => {
test('create SEPA direct debit batch, add items, generate XML', async ({
- page,
+ page: _page,
}) => {
// Create batch
// Add items with valid IBANs
@@ -14,12 +14,12 @@ test.describe('SEPA / Finance', () => {
// Verify amounts sum correctly
});
- test('IBAN validation rejects invalid IBANs', async ({ page }) => {
+ test('IBAN validation rejects invalid IBANs', async ({ page: _page }) => {
// Try to add item with invalid IBAN
// Verify rejection
});
- test('invoice creation with line items', async ({ page }) => {
+ test('invoice creation with line items', async ({ page: _page }) => {
// Create invoice
// Add 3 line items
// Verify subtotal, tax, total calculations
diff --git a/apps/web/app/[locale]/club/[slug]/newsletter/subscribe/page.tsx b/apps/web/app/[locale]/club/[slug]/newsletter/subscribe/page.tsx
index 567d32132..08d75f8f7 100644
--- a/apps/web/app/[locale]/club/[slug]/newsletter/subscribe/page.tsx
+++ b/apps/web/app/[locale]/club/[slug]/newsletter/subscribe/page.tsx
@@ -10,7 +10,7 @@ interface Props {
}
export default async function NewsletterSubscribePage({ params }: Props) {
- const { slug } = await params;
+ const { slug: _slug } = await params;
return (
diff --git a/apps/web/app/[locale]/club/[slug]/portal/profile/_components/portal-linked-accounts.tsx b/apps/web/app/[locale]/club/[slug]/portal/profile/_components/portal-linked-accounts.tsx
index 6210d65d5..51769e28e 100644
--- a/apps/web/app/[locale]/club/[slug]/portal/profile/_components/portal-linked-accounts.tsx
+++ b/apps/web/app/[locale]/club/[slug]/portal/profile/_components/portal-linked-accounts.tsx
@@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from 'react';
import type { Provider, UserIdentity } from '@supabase/supabase-js';
import { createClient } from '@supabase/supabase-js';
-import { Link2, Link2Off, Loader2 } from 'lucide-react';
+import { Link2Off, Loader2 } from 'lucide-react';
import { useTranslations } from 'next-intl';
import {
diff --git a/apps/web/app/[locale]/home/[account]/courses/[courseId]/participants/page.tsx b/apps/web/app/[locale]/home/[account]/courses/[courseId]/participants/page.tsx
index 5546e9399..13716ae69 100644
--- a/apps/web/app/[locale]/home/[account]/courses/[courseId]/participants/page.tsx
+++ b/apps/web/app/[locale]/home/[account]/courses/[courseId]/participants/page.tsx
@@ -1,5 +1,3 @@
-import Link from 'next/link';
-
import { Plus, Users } from 'lucide-react';
import { getTranslations } from 'next-intl/server';
diff --git a/apps/web/app/[locale]/home/[account]/courses/page.tsx b/apps/web/app/[locale]/home/[account]/courses/page.tsx
index 75ccbaa4b..aea8e68f9 100644
--- a/apps/web/app/[locale]/home/[account]/courses/page.tsx
+++ b/apps/web/app/[locale]/home/[account]/courses/page.tsx
@@ -7,7 +7,6 @@ import {
Plus,
Users,
Calendar,
- Euro,
} from 'lucide-react';
import { getTranslations } from 'next-intl/server';
diff --git a/apps/web/app/[locale]/home/[account]/documents/_lib/server/generate-document.ts b/apps/web/app/[locale]/home/[account]/documents/_lib/server/generate-document.ts
index ab6e95f82..244ff6186 100644
--- a/apps/web/app/[locale]/home/[account]/documents/_lib/server/generate-document.ts
+++ b/apps/web/app/[locale]/home/[account]/documents/_lib/server/generate-document.ts
@@ -114,9 +114,9 @@ async function generateMemberCards(
Text,
StyleSheet,
renderToBuffer,
- Svg,
- Rect,
- Circle,
+ Svg: _Svg,
+ Rect: _Rect,
+ Circle: _Circle,
} = await import('@react-pdf/renderer');
// — Brand colors (configurable later via account settings) —
diff --git a/apps/web/app/[locale]/home/[account]/documents/templates/page.tsx b/apps/web/app/[locale]/home/[account]/documents/templates/page.tsx
index 6cbd7d7f7..21fbb49df 100644
--- a/apps/web/app/[locale]/home/[account]/documents/templates/page.tsx
+++ b/apps/web/app/[locale]/home/[account]/documents/templates/page.tsx
@@ -1,5 +1,3 @@
-import Link from 'next/link';
-
import { FileText, Plus } from 'lucide-react';
import { getTranslations } from 'next-intl/server';
diff --git a/apps/web/app/[locale]/home/[account]/layout.tsx b/apps/web/app/[locale]/home/[account]/layout.tsx
index 830a3c86c..4bfa27b59 100644
--- a/apps/web/app/[locale]/home/[account]/layout.tsx
+++ b/apps/web/app/[locale]/home/[account]/layout.tsx
@@ -96,36 +96,37 @@ function injectAccountFeatureRoutes(
if (features.fischerei) {
featureGroups.push({
- label: 'common:routes.fisheriesManagement',
+ label: 'common.routes.fisheriesManagement',
collapsible: true,
+ collapsed: true,
children: [
{
- label: 'common:routes.fisheriesOverview',
+ label: 'common.routes.fisheriesOverview',
path: `/home/${account}/fischerei`,
Icon:
,
},
{
- label: 'common:routes.fisheriesWaters',
+ label: 'common.routes.fisheriesWaters',
path: `/home/${account}/fischerei/waters`,
Icon:
,
},
{
- label: 'common:routes.fisheriesLeases',
+ label: 'common.routes.fisheriesLeases',
path: `/home/${account}/fischerei/leases`,
Icon:
,
},
{
- label: 'common:routes.fisheriesCatchBooks',
+ label: 'common.routes.fisheriesCatchBooks',
path: `/home/${account}/fischerei/catch-books`,
Icon:
,
},
{
- label: 'common:routes.fisheriesPermits',
+ label: 'common.routes.fisheriesPermits',
path: `/home/${account}/fischerei/permits`,
Icon:
,
},
{
- label: 'common:routes.fisheriesCompetitions',
+ label: 'common.routes.fisheriesCompetitions',
path: `/home/${account}/fischerei/competitions`,
Icon:
,
},
@@ -135,21 +136,22 @@ function injectAccountFeatureRoutes(
if (features.meetings) {
featureGroups.push({
- label: 'common:routes.meetingProtocols',
+ label: 'common.routes.meetingProtocols',
collapsible: true,
+ collapsed: true,
children: [
{
- label: 'common:routes.meetingsOverview',
+ label: 'common.routes.meetingsOverview',
path: `/home/${account}/meetings`,
Icon:
,
},
{
- label: 'common:routes.meetingsProtocols',
+ label: 'common.routes.meetingsProtocols',
path: `/home/${account}/meetings/protocols`,
Icon:
,
},
{
- label: 'common:routes.meetingsTasks',
+ label: 'common.routes.meetingsTasks',
path: `/home/${account}/meetings/tasks`,
Icon:
,
},
@@ -159,36 +161,37 @@ function injectAccountFeatureRoutes(
if (features.verband) {
featureGroups.push({
- label: 'common:routes.associationManagement',
+ label: 'common.routes.associationManagement',
collapsible: true,
+ collapsed: true,
children: [
{
- label: 'common:routes.associationOverview',
+ label: 'common.routes.associationOverview',
path: `/home/${account}/verband`,
Icon:
,
},
{
- label: 'common:routes.associationHierarchy',
+ label: 'common.routes.associationHierarchy',
path: `/home/${account}/verband/hierarchy`,
Icon:
,
},
{
- label: 'common:routes.associationMemberSearch',
+ label: 'common.routes.associationMemberSearch',
path: `/home/${account}/verband/members`,
Icon:
,
},
{
- label: 'common:routes.associationEvents',
+ label: 'common.routes.associationEvents',
path: `/home/${account}/verband/events`,
Icon:
,
},
{
- label: 'common:routes.associationReporting',
+ label: 'common.routes.associationReporting',
path: `/home/${account}/verband/reporting`,
Icon:
,
},
{
- label: 'common:routes.associationTemplates',
+ label: 'common.routes.associationTemplates',
path: `/home/${account}/verband/templates`,
Icon:
,
},
@@ -222,7 +225,7 @@ async function SidebarLayout({
redirect('/');
}
- const baseConfig = getTeamAccountSidebarConfig(account);
+ const baseConfig = getTeamAccountSidebarConfig(account, features);
const config = injectAccountFeatureRoutes(baseConfig, account, features);
const accounts = data.accounts.map(({ name, slug, picture_url }) => ({
@@ -275,7 +278,7 @@ async function HeaderLayout({
getAccountFeatures(account),
]);
- const baseConfig = getTeamAccountSidebarConfig(account);
+ const baseConfig = getTeamAccountSidebarConfig(account, features);
const config = injectAccountFeatureRoutes(baseConfig, account, features);
const accounts = data.accounts.map(({ name, slug, picture_url }) => ({
diff --git a/apps/web/app/[locale]/home/[account]/members-cms/invitations/invitations-view.tsx b/apps/web/app/[locale]/home/[account]/members-cms/invitations/invitations-view.tsx
index 68cf8b1f6..374d0c432 100644
--- a/apps/web/app/[locale]/home/[account]/members-cms/invitations/invitations-view.tsx
+++ b/apps/web/app/[locale]/home/[account]/members-cms/invitations/invitations-view.tsx
@@ -62,7 +62,6 @@ export function InvitationsView({
invitations,
members,
accountId,
- account,
}: InvitationsViewProps) {
const t = useTranslations('members');
const router = useRouter();
diff --git a/apps/web/app/[locale]/home/[account]/modules/[moduleId]/settings/page.tsx b/apps/web/app/[locale]/home/[account]/modules/[moduleId]/settings/page.tsx
index ddf1de97f..4394771cf 100644
--- a/apps/web/app/[locale]/home/[account]/modules/[moduleId]/settings/page.tsx
+++ b/apps/web/app/[locale]/home/[account]/modules/[moduleId]/settings/page.tsx
@@ -1,4 +1,4 @@
-import { Link2, List } from 'lucide-react';
+import { List } from 'lucide-react';
import { createModuleBuilderApi } from '@kit/module-builder/api';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
diff --git a/apps/web/app/[locale]/home/[account]/newsletter/templates/page.tsx b/apps/web/app/[locale]/home/[account]/newsletter/templates/page.tsx
index 360fecf35..590488988 100644
--- a/apps/web/app/[locale]/home/[account]/newsletter/templates/page.tsx
+++ b/apps/web/app/[locale]/home/[account]/newsletter/templates/page.tsx
@@ -1,4 +1,3 @@
-import Link from 'next/link';
import { FileText, Plus } from 'lucide-react';
import { getTranslations } from 'next-intl/server';
diff --git a/apps/web/app/[locale]/home/[account]/site-builder/page.tsx b/apps/web/app/[locale]/home/[account]/site-builder/page.tsx
index 9f473c9fb..134f4b530 100644
--- a/apps/web/app/[locale]/home/[account]/site-builder/page.tsx
+++ b/apps/web/app/[locale]/home/[account]/site-builder/page.tsx
@@ -17,7 +17,7 @@ import { createSiteBuilderApi } from '@kit/site-builder/api';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { Badge } from '@kit/ui/badge';
import { Button } from '@kit/ui/button';
-import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card';
+import { Card, CardContent } from '@kit/ui/card';
import { cn } from '@kit/ui/utils';
import { AccountNotFound } from '~/components/account-not-found';
diff --git a/apps/web/app/[locale]/home/[account]/site-builder/posts/page.tsx b/apps/web/app/[locale]/home/[account]/site-builder/posts/page.tsx
index d4f6cf485..f4efb3ba0 100644
--- a/apps/web/app/[locale]/home/[account]/site-builder/posts/page.tsx
+++ b/apps/web/app/[locale]/home/[account]/site-builder/posts/page.tsx
@@ -1,5 +1,3 @@
-import Link from 'next/link';
-
import { Plus } from 'lucide-react';
import { getTranslations } from 'next-intl/server';
@@ -15,7 +13,6 @@ import { createSiteBuilderApi } from '@kit/site-builder/api';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { Badge } from '@kit/ui/badge';
import { Button } from '@kit/ui/button';
-import { Card, CardContent } from '@kit/ui/card';
import { AccountNotFound } from '~/components/account-not-found';
import { CmsPageShell } from '~/components/cms-page-shell';
diff --git a/apps/web/app/api/healthcheck/route.ts b/apps/web/app/api/healthcheck/route.ts
index 53ccfb018..42bdf96b0 100644
--- a/apps/web/app/api/healthcheck/route.ts
+++ b/apps/web/app/api/healthcheck/route.ts
@@ -26,7 +26,7 @@ async function getSupabaseHealthCheck() {
try {
const client = getSupabaseServerAdminClient();
- const { data, error } = await client
+ const { data: _data, error } = await client
.from('config')
.select('billing_provider')
.limit(1)
diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx
index 8a7535e86..45733419f 100644
--- a/apps/web/app/layout.tsx
+++ b/apps/web/app/layout.tsx
@@ -4,5 +4,5 @@ import { Noto_Serif } from 'next/font/google';
const notoSerif = Noto_Serif({ subsets: ['latin'], variable: '--font-serif' });
export default function RootLayout({ children }: React.PropsWithChildren) {
- return children;
+ return
{children}
;
}
diff --git a/apps/web/components/confirm-dialog.tsx b/apps/web/components/confirm-dialog.tsx
index 20b344e32..05381d40d 100644
--- a/apps/web/components/confirm-dialog.tsx
+++ b/apps/web/components/confirm-dialog.tsx
@@ -1,5 +1,7 @@
'use client';
+import { useTranslations } from 'next-intl';
+
import {
AlertDialog,
AlertDialogAction,
@@ -26,11 +28,15 @@ export function ConfirmDialog({
trigger,
title,
description,
- confirmLabel = 'Bestätigen',
- cancelLabel = 'Abbrechen',
+ confirmLabel,
+ cancelLabel,
variant = 'default',
onConfirm,
}: ConfirmDialogProps) {
+ const t = useTranslations('common');
+ const resolvedConfirmLabel = confirmLabel ?? t('confirm');
+ const resolvedCancelLabel = cancelLabel ?? t('cancel');
+
return (
{description}
- {cancelLabel}
+ {resolvedCancelLabel}
- {confirmLabel}
+ {resolvedConfirmLabel}
diff --git a/apps/web/config/team-account-navigation.config.tsx b/apps/web/config/team-account-navigation.config.tsx
index eefdcd2bc..8ffe909bf 100644
--- a/apps/web/config/team-account-navigation.config.tsx
+++ b/apps/web/config/team-account-navigation.config.tsx
@@ -40,6 +40,24 @@ import {
PanelTop,
Newspaper,
Palette,
+ // Fisheries
+ Fish,
+ Waves,
+ Anchor,
+ BookOpen,
+ ShieldCheck,
+ Trophy,
+ // Meetings
+ BookMarked,
+ ListChecks,
+ ScrollText,
+ // Association (Verband)
+ Building2,
+ Network,
+ SearchCheck,
+ Share2,
+ PieChart,
+ LayoutTemplate,
// Modules
Database,
} from 'lucide-react';
@@ -51,7 +69,7 @@ import pathsConfig from '~/config/paths.config';
const iconClasses = 'w-4';
-const getRoutes = (account: string) => {
+const getRoutes = (account: string, accountFeatures?: Record) => {
const routes: Array<
| {
label: string;
@@ -71,10 +89,10 @@ const getRoutes = (account: string) => {
> = [
// ── Dashboard ──
{
- label: 'common:routes.dashboard',
+ label: 'common.routes.dashboard',
children: [
{
- label: 'common:routes.dashboard',
+ label: 'common.routes.dashboard',
path: pathsConfig.app.accountHome.replace('[account]', account),
Icon: ,
highlightMatch: `${pathsConfig.app.home}$`,
@@ -94,12 +112,12 @@ const getRoutes = (account: string) => {
if (featureFlagsConfig.enableMemberManagement) {
peopleChildren.push(
{
- label: 'common:routes.clubMembers',
+ label: 'common.routes.clubMembers',
path: createPath(pathsConfig.app.accountCmsMembers, account),
Icon: ,
},
{
- label: 'common:routes.memberApplications',
+ label: 'common.routes.memberApplications',
path: createPath(
pathsConfig.app.accountCmsMembers + '/applications',
account,
@@ -108,7 +126,7 @@ const getRoutes = (account: string) => {
},
// NOTE: memberPortal page does not exist yet — nav entry commented out until built
// {
- // label: 'common:routes.memberPortal',
+ // label: 'common.routes.memberPortal',
// path: createPath(
// pathsConfig.app.accountCmsMembers + '/portal',
// account,
@@ -116,7 +134,7 @@ const getRoutes = (account: string) => {
// Icon: ,
// },
{
- label: 'common:routes.memberCards',
+ label: 'common.routes.memberCards',
path: createPath(
pathsConfig.app.accountCmsMembers + '/cards',
account,
@@ -124,7 +142,7 @@ const getRoutes = (account: string) => {
Icon: ,
},
{
- label: 'common:routes.memberDues',
+ label: 'common.routes.memberDues',
path: createPath(
pathsConfig.app.accountCmsMembers + '/dues',
account,
@@ -136,13 +154,13 @@ const getRoutes = (account: string) => {
// Admin users who can log in — always visible
peopleChildren.push({
- label: 'common:routes.accessAndRoles',
+ label: 'common.routes.accessAndRoles',
path: createPath(pathsConfig.app.accountMembers, account),
Icon: ,
});
routes.push({
- label: 'common:routes.people',
+ label: 'common.routes.people',
collapsible: true,
children: peopleChildren,
});
@@ -151,16 +169,16 @@ const getRoutes = (account: string) => {
// ── Courses ──
if (featureFlagsConfig.enableCourseManagement) {
routes.push({
- label: 'common:routes.courseManagement',
+ label: 'common.routes.courseManagement',
collapsible: true,
children: [
{
- label: 'common:routes.courseList',
+ label: 'common.routes.courseList',
path: createPath(pathsConfig.app.accountCourses, account),
Icon: ,
},
{
- label: 'common:routes.courseCalendar',
+ label: 'common.routes.courseCalendar',
path: createPath(
pathsConfig.app.accountCourses + '/calendar',
account,
@@ -168,7 +186,7 @@ const getRoutes = (account: string) => {
Icon: ,
},
{
- label: 'common:routes.courseInstructors',
+ label: 'common.routes.courseInstructors',
path: createPath(
pathsConfig.app.accountCourses + '/instructors',
account,
@@ -176,7 +194,7 @@ const getRoutes = (account: string) => {
Icon: ,
},
{
- label: 'common:routes.courseLocations',
+ label: 'common.routes.courseLocations',
path: createPath(
pathsConfig.app.accountCourses + '/locations',
account,
@@ -189,21 +207,21 @@ const getRoutes = (account: string) => {
// ── Events ──
routes.push({
- label: 'common:routes.eventManagement',
+ label: 'common.routes.eventManagement',
collapsible: true,
children: [
{
- label: 'common:routes.eventList',
+ label: 'common.routes.eventList',
path: createPath('/home/[account]/events', account),
Icon: ,
},
{
- label: 'common:routes.eventRegistrations',
+ label: 'common.routes.eventRegistrations',
path: createPath('/home/[account]/events/registrations', account),
Icon: ,
},
{
- label: 'common:routes.holidayPasses',
+ label: 'common.routes.holidayPasses',
path: createPath('/home/[account]/events/holiday-passes', account),
Icon: ,
},
@@ -213,16 +231,17 @@ const getRoutes = (account: string) => {
// ── Bookings ──
if (featureFlagsConfig.enableBookingManagement) {
routes.push({
- label: 'common:routes.bookingManagement',
+ label: 'common.routes.bookingManagement',
collapsible: true,
+ collapsed: true,
children: [
{
- label: 'common:routes.bookingList',
+ label: 'common.routes.bookingList',
path: createPath(pathsConfig.app.accountBookings, account),
Icon: ,
},
{
- label: 'common:routes.bookingCalendar',
+ label: 'common.routes.bookingCalendar',
path: createPath(
pathsConfig.app.accountBookings + '/calendar',
account,
@@ -230,12 +249,12 @@ const getRoutes = (account: string) => {
Icon: ,
},
{
- label: 'common:routes.bookingRooms',
+ label: 'common.routes.bookingRooms',
path: createPath(pathsConfig.app.accountBookings + '/rooms', account),
Icon: ,
},
{
- label: 'common:routes.bookingGuests',
+ label: 'common.routes.bookingGuests',
path: createPath(
pathsConfig.app.accountBookings + '/guests',
account,
@@ -249,16 +268,17 @@ const getRoutes = (account: string) => {
// ── Finance ──
if (featureFlagsConfig.enableSepaPayments) {
routes.push({
- label: 'common:routes.financeManagement',
+ label: 'common.routes.financeManagement',
collapsible: true,
+ collapsed: true,
children: [
{
- label: 'common:routes.financeOverview',
+ label: 'common.routes.financeOverview',
path: createPath(pathsConfig.app.accountFinance, account),
Icon: ,
},
{
- label: 'common:routes.financeInvoices',
+ label: 'common.routes.financeInvoices',
path: createPath(
pathsConfig.app.accountFinance + '/invoices',
account,
@@ -266,12 +286,12 @@ const getRoutes = (account: string) => {
Icon: ,
},
{
- label: 'common:routes.financeSepa',
+ label: 'common.routes.financeSepa',
path: createPath(pathsConfig.app.accountFinance + '/sepa', account),
Icon: ,
},
{
- label: 'common:routes.financePayments',
+ label: 'common.routes.financePayments',
path: createPath(
pathsConfig.app.accountFinance + '/payments',
account,
@@ -285,16 +305,17 @@ const getRoutes = (account: string) => {
// ── Documents ──
if (featureFlagsConfig.enableDocumentGeneration) {
routes.push({
- label: 'common:routes.documentManagement',
+ label: 'common.routes.documentManagement',
collapsible: true,
+ collapsed: true,
children: [
{
- label: 'common:routes.documentOverview',
+ label: 'common.routes.documentOverview',
path: createPath(pathsConfig.app.accountDocuments, account),
Icon: ,
},
{
- label: 'common:routes.documentGenerate',
+ label: 'common.routes.documentGenerate',
path: createPath(
pathsConfig.app.accountDocuments + '/generate',
account,
@@ -302,7 +323,7 @@ const getRoutes = (account: string) => {
Icon: ,
},
{
- label: 'common:routes.documentTemplates',
+ label: 'common.routes.documentTemplates',
path: createPath(
pathsConfig.app.accountDocuments + '/templates',
account,
@@ -310,7 +331,7 @@ const getRoutes = (account: string) => {
Icon: ,
},
{
- label: 'common:routes.files',
+ label: 'common.routes.files',
path: createPath(pathsConfig.app.accountFiles, account),
Icon: ,
},
@@ -321,21 +342,22 @@ const getRoutes = (account: string) => {
// ── Newsletter ──
if (featureFlagsConfig.enableNewsletter) {
routes.push({
- label: 'common:routes.newsletterManagement',
+ label: 'common.routes.newsletterManagement',
collapsible: true,
+ collapsed: true,
children: [
{
- label: 'common:routes.newsletterCampaigns',
+ label: 'common.routes.newsletterCampaigns',
path: createPath(pathsConfig.app.accountNewsletter, account),
Icon: ,
},
{
- label: 'common:routes.newsletterNew',
+ label: 'common.routes.newsletterNew',
path: createPath(pathsConfig.app.accountNewsletter + '/new', account),
Icon: ,
},
{
- label: 'common:routes.newsletterTemplates',
+ label: 'common.routes.newsletterTemplates',
path: createPath(
pathsConfig.app.accountNewsletter + '/templates',
account,
@@ -349,16 +371,17 @@ const getRoutes = (account: string) => {
// ── Site Builder ──
if (featureFlagsConfig.enableSiteBuilder) {
routes.push({
- label: 'common:routes.siteBuilder',
+ label: 'common.routes.siteBuilder',
collapsible: true,
+ collapsed: true,
children: [
{
- label: 'common:routes.sitePages',
+ label: 'common.routes.sitePages',
path: createPath(pathsConfig.app.accountSiteBuilder, account),
Icon: ,
},
{
- label: 'common:routes.sitePosts',
+ label: 'common.routes.sitePosts',
path: createPath(
pathsConfig.app.accountSiteBuilder + '/posts',
account,
@@ -366,7 +389,7 @@ const getRoutes = (account: string) => {
Icon: ,
},
{
- label: 'common:routes.siteSettings',
+ label: 'common.routes.siteSettings',
path: createPath(
pathsConfig.app.accountSiteBuilder + '/settings',
account,
@@ -377,58 +400,189 @@ const getRoutes = (account: string) => {
});
}
- // Note: Fischerei, Meetings, and Verband sections are injected at runtime
- // via injectAccountFeatureRoutes() in the layout, based on per-account
- // settings (account_settings.features). They are NOT added here to avoid
- // duplicate entries when both the global feature flag and per-account
- // setting are enabled.
+ // ── Custom Modules ──
+ if (featureFlagsConfig.enableModuleBuilder) {
+ routes.push({
+ label: 'common.routes.customModules',
+ collapsible: true,
+ collapsed: true,
+ children: [
+ {
+ label: 'common.routes.moduleList',
+ path: createPath(pathsConfig.app.accountModules, account),
+ Icon: ,
+ },
+ ],
+ });
+ }
+
+ // ── Fisheries ──
+ if (featureFlagsConfig.enableFischerei && (accountFeatures?.fischerei !== false)) {
+ routes.push({
+ label: 'common.routes.fisheriesManagement',
+ collapsible: true,
+ collapsed: true,
+ children: [
+ {
+ label: 'common.routes.fisheriesOverview',
+ path: createPath(pathsConfig.app.accountFischerei, account),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.fisheriesWaters',
+ path: createPath(
+ pathsConfig.app.accountFischerei + '/waters',
+ account,
+ ),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.fisheriesLeases',
+ path: createPath(
+ pathsConfig.app.accountFischerei + '/leases',
+ account,
+ ),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.fisheriesCatchBooks',
+ path: createPath(
+ pathsConfig.app.accountFischerei + '/catch-books',
+ account,
+ ),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.fisheriesPermits',
+ path: createPath(
+ pathsConfig.app.accountFischerei + '/permits',
+ account,
+ ),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.fisheriesCompetitions',
+ path: createPath(
+ pathsConfig.app.accountFischerei + '/competitions',
+ account,
+ ),
+ Icon: ,
+ },
+ ],
+ });
+ }
+
+ // ── Meeting Protocols ──
+ if (featureFlagsConfig.enableMeetingProtocols && (accountFeatures?.meetings !== false)) {
+ routes.push({
+ label: 'common.routes.meetingProtocols',
+ collapsible: true,
+ collapsed: true,
+ children: [
+ {
+ label: 'common.routes.meetingsOverview',
+ path: createPath(pathsConfig.app.accountMeetings, account),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.meetingsProtocols',
+ path: createPath(
+ pathsConfig.app.accountMeetings + '/protocols',
+ account,
+ ),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.meetingsTasks',
+ path: createPath(pathsConfig.app.accountMeetings + '/tasks', account),
+ Icon: ,
+ },
+ ],
+ });
+ }
+
+ // ── Association Management (Verband) ──
+ if (featureFlagsConfig.enableVerbandsverwaltung && (accountFeatures?.verband !== false)) {
+ routes.push({
+ label: 'common.routes.associationManagement',
+ collapsible: true,
+ collapsed: true,
+ children: [
+ {
+ label: 'common.routes.associationOverview',
+ path: createPath(pathsConfig.app.accountVerband, account),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.associationHierarchy',
+ path: createPath(
+ pathsConfig.app.accountVerband + '/hierarchy',
+ account,
+ ),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.associationMemberSearch',
+ path: createPath(
+ pathsConfig.app.accountVerband + '/members',
+ account,
+ ),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.associationEvents',
+ path: createPath(pathsConfig.app.accountVerband + '/events', account),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.associationReporting',
+ path: createPath(
+ pathsConfig.app.accountVerband + '/reporting',
+ account,
+ ),
+ Icon: ,
+ },
+ {
+ label: 'common.routes.associationTemplates',
+ path: createPath(
+ pathsConfig.app.accountVerband + '/templates',
+ account,
+ ),
+ Icon: ,
+ },
+ ],
+ });
+ }
// ── Administration ──
- {
- const adminChildren: Array<
- | {
- label: string;
- path: string;
- Icon: React.ReactNode;
- }
- | undefined
- > = [
+ routes.push({
+ label: 'common.routes.administration',
+ collapsible: false,
+ children: [
{
- label: 'common:routes.accountSettings',
+ label: 'common.routes.accountSettings',
path: createPath(pathsConfig.app.accountSettings, account),
Icon: ,
},
- ];
-
- if (featureFlagsConfig.enableModuleBuilder) {
- adminChildren.push({
- label: 'common:routes.moduleList',
- path: createPath(pathsConfig.app.accountModules, account),
- Icon: ,
- });
- }
-
- if (featureFlagsConfig.enableTeamAccountBilling) {
- adminChildren.push({
- label: 'common:routes.billing',
- path: createPath(pathsConfig.app.accountBilling, account),
- Icon: ,
- });
- }
-
- routes.push({
- label: 'common:routes.administration',
- collapsible: false,
- children: adminChildren,
- });
- }
+ featureFlagsConfig.enableTeamAccountBilling
+ ? {
+ label: 'common.routes.billing',
+ path: createPath(pathsConfig.app.accountBilling, account),
+ Icon: ,
+ }
+ : undefined,
+ ],
+ });
return routes;
};
-export function getTeamAccountSidebarConfig(account: string) {
+export function getTeamAccountSidebarConfig(
+ account: string,
+ accountFeatures?: Record,
+) {
return NavigationConfigSchema.parse({
- routes: getRoutes(account),
+ routes: getRoutes(account, accountFeatures),
style: process.env.NEXT_PUBLIC_TEAM_NAVIGATION_STYLE,
sidebarCollapsed: process.env.NEXT_PUBLIC_TEAM_SIDEBAR_COLLAPSED,
sidebarCollapsedStyle: process.env.NEXT_PUBLIC_SIDEBAR_COLLAPSIBLE_STYLE,
diff --git a/apps/web/i18n/messages/de/cms.json b/apps/web/i18n/messages/de/cms.json
index 04c947bab..732b48f91 100644
--- a/apps/web/i18n/messages/de/cms.json
+++ b/apps/web/i18n/messages/de/cms.json
@@ -170,7 +170,7 @@
},
"events": {
"title": "Veranstaltungen",
- "description": "Beschreibung",
+ "description": "Veranstaltungen planen, verwalten und Anmeldungen erfassen",
"newEvent": "Neue Veranstaltung",
"registrations": "Anmeldungen",
"holidayPasses": "Ferienpässe",
diff --git a/apps/web/i18n/messages/de/common.json b/apps/web/i18n/messages/de/common.json
index d94b25231..a3a82ef41 100644
--- a/apps/web/i18n/messages/de/common.json
+++ b/apps/web/i18n/messages/de/common.json
@@ -137,7 +137,9 @@
"associationReporting": "Berichte",
"associationTemplates": "Geteilte Vorlagen",
"administration": "Administration",
- "accountSettings": "Kontoeinstellungen"
+ "accountSettings": "Kontoeinstellungen",
+ "application": "Anwendung",
+ "home": "Startseite"
},
"roles": {
"owner": {
@@ -219,5 +221,6 @@
"title": "Konto nicht gefunden",
"description": "Das angeforderte Konto existiert nicht oder Sie haben keine Berechtigung darauf zuzugreifen.",
"action": "Zum Dashboard"
- }
+ },
+ "confirm": "Bestätigen"
}
diff --git a/apps/web/i18n/messages/en/cms.json b/apps/web/i18n/messages/en/cms.json
index 98f3682a6..027c53567 100644
--- a/apps/web/i18n/messages/en/cms.json
+++ b/apps/web/i18n/messages/en/cms.json
@@ -170,7 +170,7 @@
},
"events": {
"title": "Events",
- "description": "Description",
+ "description": "Plan, manage, and track event registrations",
"newEvent": "New Event",
"registrations": "Registrations",
"holidayPasses": "Holiday Passes",
diff --git a/apps/web/i18n/messages/en/common.json b/apps/web/i18n/messages/en/common.json
index 00b5f9ee4..402d85136 100644
--- a/apps/web/i18n/messages/en/common.json
+++ b/apps/web/i18n/messages/en/common.json
@@ -138,7 +138,8 @@
"associationReporting": "Reports",
"associationTemplates": "Shared Templates",
"administration": "Administration",
- "accountSettings": "Account Settings"
+ "accountSettings": "Account Settings",
+ "application": "Application"
},
"roles": {
"owner": {
@@ -220,5 +221,6 @@
"title": "Account not found",
"description": "The requested account does not exist or you do not have permission to access it.",
"action": "Go to Dashboard"
- }
+ },
+ "confirm": "Confirm"
}
diff --git a/packages/features/admin/src/server/services/legacy-migration.service.ts b/packages/features/admin/src/server/services/legacy-migration.service.ts
index c1794c1bc..9b99226e6 100644
--- a/packages/features/admin/src/server/services/legacy-migration.service.ts
+++ b/packages/features/admin/src/server/services/legacy-migration.service.ts
@@ -171,7 +171,7 @@ async function migrateAccounts(
onProgress?.('Creating team accounts', Object.keys(TENANT_MAPPING).length);
- for (const [profileId, config] of Object.entries(TENANT_MAPPING)) {
+ for (const [profileId, _config] of Object.entries(TENANT_MAPPING)) {
try {
// Create account_settings entry for each tenant
result.count++;
diff --git a/packages/features/auth/src/components/multi-factor-challenge-container.tsx b/packages/features/auth/src/components/multi-factor-challenge-container.tsx
index eeb22ea47..fbf1236f9 100644
--- a/packages/features/auth/src/components/multi-factor-challenge-container.tsx
+++ b/packages/features/auth/src/components/multi-factor-challenge-container.tsx
@@ -9,7 +9,7 @@ import type { Factor } from '@supabase/supabase-js';
import { zodResolver } from '@hookform/resolvers/zod';
import { useMutation } from '@tanstack/react-query';
import { Fingerprint, KeyRound, TriangleAlert } from 'lucide-react';
-import { useForm, useWatch } from 'react-hook-form';
+import { useForm } from 'react-hook-form';
import * as z from 'zod';
import { useFetchAuthFactors } from '@kit/supabase/hooks/use-fetch-mfa-factors';
diff --git a/packages/features/booking-management/src/server/actions/booking-actions.ts b/packages/features/booking-management/src/server/actions/booking-actions.ts
index 8b046a253..7d059b182 100644
--- a/packages/features/booking-management/src/server/actions/booking-actions.ts
+++ b/packages/features/booking-management/src/server/actions/booking-actions.ts
@@ -15,7 +15,7 @@ import { createBookingManagementApi } from '../api';
export const createBooking = authActionClient
.inputSchema(CreateBookingSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createBookingManagementApi(client);
@@ -33,7 +33,7 @@ export const updateBookingStatus = authActionClient
status: z.string(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createBookingManagementApi(client);
@@ -46,7 +46,7 @@ export const updateBookingStatus = authActionClient
export const createRoom = authActionClient
.inputSchema(CreateRoomSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createBookingManagementApi(client);
@@ -59,7 +59,7 @@ export const createRoom = authActionClient
export const createGuest = authActionClient
.inputSchema(CreateGuestSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createBookingManagementApi(client);
diff --git a/packages/features/booking-management/src/server/api.ts b/packages/features/booking-management/src/server/api.ts
index d2a0fd447..afc9badb4 100644
--- a/packages/features/booking-management/src/server/api.ts
+++ b/packages/features/booking-management/src/server/api.ts
@@ -7,7 +7,7 @@ import type { CreateBookingInput } from '../schema/booking.schema';
/* eslint-disable @typescript-eslint/no-explicit-any */
export function createBookingManagementApi(client: SupabaseClient) {
- const db = client;
+ const _db = client;
return {
// --- Rooms ---
diff --git a/packages/features/course-management/src/server/actions/course-actions.ts b/packages/features/course-management/src/server/actions/course-actions.ts
index c0bcbfc81..28a3c0338 100644
--- a/packages/features/course-management/src/server/actions/course-actions.ts
+++ b/packages/features/course-management/src/server/actions/course-actions.ts
@@ -19,7 +19,7 @@ import { createCourseManagementApi } from '../api';
export const createCourse = authActionClient
.inputSchema(CreateCourseSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
@@ -32,7 +32,7 @@ export const createCourse = authActionClient
export const updateCourse = authActionClient
.inputSchema(UpdateCourseSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
@@ -45,7 +45,7 @@ export const updateCourse = authActionClient
export const deleteCourse = authActionClient
.inputSchema(z.object({ courseId: z.string().uuid() }))
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
@@ -58,7 +58,7 @@ export const deleteCourse = authActionClient
export const enrollParticipant = authActionClient
.inputSchema(EnrollParticipantSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
@@ -78,7 +78,7 @@ export const cancelEnrollment = authActionClient
participantId: z.string().uuid(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
@@ -100,7 +100,7 @@ export const markAttendance = authActionClient
present: z.boolean(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
@@ -117,7 +117,7 @@ export const markAttendance = authActionClient
export const createCategory = authActionClient
.inputSchema(CreateCategorySchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
@@ -130,7 +130,7 @@ export const createCategory = authActionClient
export const createInstructor = authActionClient
.inputSchema(CreateInstructorSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
@@ -143,7 +143,7 @@ export const createInstructor = authActionClient
export const createLocation = authActionClient
.inputSchema(CreateLocationSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
@@ -156,7 +156,7 @@ export const createLocation = authActionClient
export const createSession = authActionClient
.inputSchema(CreateSessionSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createCourseManagementApi(client);
diff --git a/packages/features/course-management/src/server/api.ts b/packages/features/course-management/src/server/api.ts
index 515dcf595..e5ae2d0d3 100644
--- a/packages/features/course-management/src/server/api.ts
+++ b/packages/features/course-management/src/server/api.ts
@@ -11,7 +11,7 @@ import type {
/* eslint-disable @typescript-eslint/no-explicit-any */
export function createCourseManagementApi(client: SupabaseClient) {
- const db = client;
+ const _db = client;
return {
// --- Courses ---
diff --git a/packages/features/document-generator/src/server/api.ts b/packages/features/document-generator/src/server/api.ts
index af15487e1..e69b42fe3 100644
--- a/packages/features/document-generator/src/server/api.ts
+++ b/packages/features/document-generator/src/server/api.ts
@@ -11,7 +11,7 @@ export function createDocumentGeneratorApi() {
* Generate a PDF document (member card, invoice, certificate, etc.)
* Uses @react-pdf/renderer or jspdf at runtime.
*/
- async generatePdf(params: {
+ async generatePdf(_params: {
title: string;
content: Record;
format?: 'A4' | 'A5' | 'letter';
@@ -28,7 +28,7 @@ export function createDocumentGeneratorApi() {
* Generate an Excel workbook (reports, data exports)
* Uses exceljs at runtime.
*/
- async generateExcel(params: {
+ async generateExcel(_params: {
title: string;
sheets: Array<{
name: string;
@@ -45,7 +45,7 @@ export function createDocumentGeneratorApi() {
* Generate a Word document (mail merge, letters)
* Uses docx at runtime.
*/
- async generateWord(params: {
+ async generateWord(_params: {
title: string;
templateContent: string;
mergeFields: Record;
diff --git a/packages/features/event-management/src/server/actions/event-actions.ts b/packages/features/event-management/src/server/actions/event-actions.ts
index 479980544..02ed99356 100644
--- a/packages/features/event-management/src/server/actions/event-actions.ts
+++ b/packages/features/event-management/src/server/actions/event-actions.ts
@@ -16,7 +16,7 @@ import { createEventManagementApi } from '../api';
export const createEvent = authActionClient
.inputSchema(CreateEventSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createEventManagementApi(client);
@@ -29,7 +29,7 @@ export const createEvent = authActionClient
export const updateEvent = authActionClient
.inputSchema(UpdateEventSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createEventManagementApi(client);
@@ -42,7 +42,7 @@ export const updateEvent = authActionClient
export const deleteEvent = authActionClient
.inputSchema(z.object({ eventId: z.string().uuid() }))
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createEventManagementApi(client);
@@ -55,7 +55,7 @@ export const deleteEvent = authActionClient
export const registerForEvent = authActionClient
.inputSchema(EventRegistrationSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createEventManagementApi(client);
@@ -68,7 +68,7 @@ export const registerForEvent = authActionClient
export const createHolidayPass = authActionClient
.inputSchema(CreateHolidayPassSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createEventManagementApi(client);
diff --git a/packages/features/event-management/src/server/api.ts b/packages/features/event-management/src/server/api.ts
index f7ccd6e4f..351e4f989 100644
--- a/packages/features/event-management/src/server/api.ts
+++ b/packages/features/event-management/src/server/api.ts
@@ -11,7 +11,7 @@ import type {
export function createEventManagementApi(client: SupabaseClient) {
const PAGE_SIZE = 25;
- const db = client;
+ const _db = client;
return {
async listEvents(
diff --git a/packages/features/finance/src/server/actions/finance-actions.ts b/packages/features/finance/src/server/actions/finance-actions.ts
index ece11383d..deb473a3b 100644
--- a/packages/features/finance/src/server/actions/finance-actions.ts
+++ b/packages/features/finance/src/server/actions/finance-actions.ts
@@ -15,7 +15,7 @@ import { createFinanceApi } from '../api';
export const createSepaBatch = authActionClient
.inputSchema(CreateSepaBatchSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFinanceApi(client);
@@ -29,7 +29,7 @@ export const createSepaBatch = authActionClient
export const addSepaItem = authActionClient
.inputSchema(AddSepaItemSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFinanceApi(client);
@@ -51,7 +51,7 @@ export const generateSepaXml = authActionClient
creditorId: z.string(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFinanceApi(client);
@@ -76,7 +76,7 @@ export const generateSepaXml = authActionClient
export const createInvoice = authActionClient
.inputSchema(CreateInvoiceSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFinanceApi(client);
diff --git a/packages/features/finance/src/server/api.ts b/packages/features/finance/src/server/api.ts
index e10f10d0d..a625430cc 100644
--- a/packages/features/finance/src/server/api.ts
+++ b/packages/features/finance/src/server/api.ts
@@ -16,7 +16,7 @@ import {
/* eslint-disable @typescript-eslint/no-explicit-any */
export function createFinanceApi(client: SupabaseClient) {
- const db = client;
+ const _db = client;
return {
// --- SEPA Batches ---
diff --git a/packages/features/fischerei/src/components/competitions-data-table.tsx b/packages/features/fischerei/src/components/competitions-data-table.tsx
index 237731c1d..f4c819d53 100644
--- a/packages/features/fischerei/src/components/competitions-data-table.tsx
+++ b/packages/features/fischerei/src/components/competitions-data-table.tsx
@@ -9,7 +9,7 @@ import { Pencil, Plus } from 'lucide-react';
import { formatDate } from '@kit/shared/dates';
import { Button } from '@kit/ui/button';
-import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card';
+import { Card, CardContent } from '@kit/ui/card';
import { useActionWithToast } from '@kit/ui/use-action-with-toast';
import { deleteCompetition } from '../server/actions/fischerei-actions';
diff --git a/packages/features/fischerei/src/components/species-data-table.tsx b/packages/features/fischerei/src/components/species-data-table.tsx
index 910817600..f4b481d4a 100644
--- a/packages/features/fischerei/src/components/species-data-table.tsx
+++ b/packages/features/fischerei/src/components/species-data-table.tsx
@@ -8,7 +8,6 @@ import { useRouter, useSearchParams } from 'next/navigation';
import { Pencil, Plus } from 'lucide-react';
import { useForm } from 'react-hook-form';
-import { Badge } from '@kit/ui/badge';
import { Button } from '@kit/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card';
import { Input } from '@kit/ui/input';
diff --git a/packages/features/fischerei/src/components/stocking-data-table.tsx b/packages/features/fischerei/src/components/stocking-data-table.tsx
index 28390199d..b99c511d7 100644
--- a/packages/features/fischerei/src/components/stocking-data-table.tsx
+++ b/packages/features/fischerei/src/components/stocking-data-table.tsx
@@ -6,14 +6,12 @@ import Link from 'next/link';
import { useRouter, useSearchParams } from 'next/navigation';
import { Pencil, Plus } from 'lucide-react';
-import { useForm } from 'react-hook-form';
import { formatDate } from '@kit/shared/dates';
import { formatNumber, formatCurrencyAmount } from '@kit/shared/formatters';
import { Badge } from '@kit/ui/badge';
import { Button } from '@kit/ui/button';
-import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card';
-import { Input } from '@kit/ui/input';
+import { Card, CardContent } from '@kit/ui/card';
import { useActionWithToast } from '@kit/ui/use-action-with-toast';
import { AGE_CLASS_LABELS } from '../lib/fischerei-constants';
diff --git a/packages/features/fischerei/src/server/actions/fischerei-actions.ts b/packages/features/fischerei/src/server/actions/fischerei-actions.ts
index c94d0f870..24d3ef97d 100644
--- a/packages/features/fischerei/src/server/actions/fischerei-actions.ts
+++ b/packages/features/fischerei/src/server/actions/fischerei-actions.ts
@@ -29,7 +29,6 @@ import {
CreateCompetitionParticipantSchema,
CreateSupplierSchema,
UpdateSupplierSchema,
- catchBookStatusSchema,
catchBookVerificationSchema,
} from '../../schema/fischerei.schema';
import { createFischereiApi } from '../api';
@@ -40,7 +39,7 @@ import { createFischereiApi } from '../api';
export const createWater = authActionClient
.inputSchema(CreateWaterSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -55,7 +54,7 @@ export const createWater = authActionClient
export const updateWater = authActionClient
.inputSchema(UpdateWaterSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -192,7 +191,7 @@ export const deleteWaterSpeciesRule = authActionClient
export const createStocking = authActionClient
.inputSchema(CreateStockingSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -213,7 +212,7 @@ export const createStocking = authActionClient
export const updateStocking = authActionClient
.inputSchema(UpdateStockingSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -263,7 +262,7 @@ export const deleteStocking = authActionClient
export const createLease = authActionClient
.inputSchema(CreateLeaseSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -278,7 +277,7 @@ export const createLease = authActionClient
export const updateLease = authActionClient
.inputSchema(UpdateLeaseSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -316,7 +315,7 @@ export const deleteLease = authActionClient
export const createCatchBook = authActionClient
.inputSchema(CreateCatchBookSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -334,7 +333,7 @@ export const createCatchBook = authActionClient
export const updateCatchBook = authActionClient
.inputSchema(UpdateCatchBookSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -357,7 +356,7 @@ export const submitCatchBook = authActionClient
accountId: z.string().uuid(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -383,7 +382,7 @@ export const reviewCatchBook = authActionClient
remarks: z.string().optional(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -581,7 +580,7 @@ export const removeInspector = authActionClient
export const createCompetition = authActionClient
.inputSchema(CreateCompetitionSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
@@ -602,7 +601,7 @@ export const createCompetition = authActionClient
export const updateCompetition = authActionClient
.inputSchema(UpdateCompetitionSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createFischereiApi(client);
diff --git a/packages/features/fischerei/src/server/api.ts b/packages/features/fischerei/src/server/api.ts
index 9e7a1b4d4..b8c0b4826 100644
--- a/packages/features/fischerei/src/server/api.ts
+++ b/packages/features/fischerei/src/server/api.ts
@@ -1154,7 +1154,7 @@ export function createFischereiApi(client: SupabaseClient) {
return data;
},
- async updateCompetition(input: UpdateCompetitionInput, userId: string) {
+ async updateCompetition(input: UpdateCompetitionInput, _userId: string) {
const updateData: Record = {};
if (input.name !== undefined) updateData.name = input.name;
diff --git a/packages/features/member-management/src/components/application-workflow.tsx b/packages/features/member-management/src/components/application-workflow.tsx
index 06cc94de0..3a599be5a 100644
--- a/packages/features/member-management/src/components/application-workflow.tsx
+++ b/packages/features/member-management/src/components/application-workflow.tsx
@@ -29,7 +29,7 @@ interface ApplicationWorkflowProps {
export function ApplicationWorkflow({
applications,
accountId,
- account,
+ account: _account,
}: ApplicationWorkflowProps) {
const router = useRouter();
diff --git a/packages/features/member-management/src/components/mandate-manager.tsx b/packages/features/member-management/src/components/mandate-manager.tsx
index 940156e49..5acd180ac 100644
--- a/packages/features/member-management/src/components/mandate-manager.tsx
+++ b/packages/features/member-management/src/components/mandate-manager.tsx
@@ -23,7 +23,7 @@ interface MandateManagerProps {
accountId: string;
}
-const SEQUENCE_LABELS: Record = {
+const _SEQUENCE_LABELS: Record = {
FRST: 'Erstlastschrift',
RCUR: 'Wiederkehrend',
FNAL: 'Letzte',
diff --git a/packages/features/member-management/src/components/members-data-table.tsx b/packages/features/member-management/src/components/members-data-table.tsx
index f2bd4960b..5b80f92aa 100644
--- a/packages/features/member-management/src/components/members-data-table.tsx
+++ b/packages/features/member-management/src/components/members-data-table.tsx
@@ -44,7 +44,7 @@ export function MembersDataTable({
pageSize,
account,
accountId,
- duesCategories,
+ duesCategories: _duesCategories,
}: MembersDataTableProps) {
const router = useRouter();
const searchParams = useSearchParams();
diff --git a/packages/features/member-management/src/server/actions/member-actions.ts b/packages/features/member-management/src/server/actions/member-actions.ts
index 0ea5c9c53..02248f029 100644
--- a/packages/features/member-management/src/server/actions/member-actions.ts
+++ b/packages/features/member-management/src/server/actions/member-actions.ts
@@ -24,7 +24,7 @@ import { createMemberManagementApi } from '../api';
export const createMember = authActionClient
.inputSchema(CreateMemberSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createMemberManagementApi(client);
@@ -58,7 +58,7 @@ export const createMember = authActionClient
export const updateMember = authActionClient
.inputSchema(UpdateMemberSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createMemberManagementApi(client);
@@ -77,7 +77,7 @@ export const deleteMember = authActionClient
accountId: z.string().uuid(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createMemberManagementApi(client);
@@ -95,7 +95,7 @@ export const approveApplication = authActionClient
accountId: z.string().uuid(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createMemberManagementApi(client);
@@ -112,7 +112,7 @@ export const approveApplication = authActionClient
export const rejectApplication = authActionClient
.inputSchema(RejectApplicationSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createMemberManagementApi(client);
@@ -297,7 +297,7 @@ export const generateMemberCards = authActionClient
)
.action(async ({ parsedInput: input }) => {
const client = getSupabaseServerClient();
- const api = createMemberManagementApi(client);
+ const _api = createMemberManagementApi(client);
let query = client
.from('members')
@@ -342,7 +342,7 @@ export const inviteMemberToPortal = authActionClient
email: z.string().email(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createMemberManagementApi(client);
diff --git a/packages/features/newsletter/src/server/actions/newsletter-actions.ts b/packages/features/newsletter/src/server/actions/newsletter-actions.ts
index 482c85fc3..21ec704d6 100644
--- a/packages/features/newsletter/src/server/actions/newsletter-actions.ts
+++ b/packages/features/newsletter/src/server/actions/newsletter-actions.ts
@@ -9,13 +9,12 @@ import { getSupabaseServerClient } from '@kit/supabase/server-client';
import {
CreateNewsletterSchema,
UpdateNewsletterSchema,
- CreateTemplateSchema,
} from '../../schema/newsletter.schema';
import { createNewsletterApi } from '../api';
export const createNewsletter = authActionClient
.inputSchema(CreateNewsletterSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createNewsletterApi(client);
@@ -29,7 +28,7 @@ export const createNewsletter = authActionClient
export const updateNewsletter = authActionClient
.inputSchema(UpdateNewsletterSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createNewsletterApi(client);
@@ -51,7 +50,7 @@ export const createTemplate = authActionClient
variables: z.array(z.string()).optional(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createNewsletterApi(client);
@@ -74,7 +73,7 @@ export const addRecipients = authActionClient
.optional(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createNewsletterApi(client);
@@ -95,7 +94,7 @@ export const dispatchNewsletter = authActionClient
newsletterId: z.string().uuid(),
}),
)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const logger = await getLogger();
const api = createNewsletterApi(client);
diff --git a/packages/features/newsletter/src/server/api.ts b/packages/features/newsletter/src/server/api.ts
index 5ad16dbc5..9ae225a92 100644
--- a/packages/features/newsletter/src/server/api.ts
+++ b/packages/features/newsletter/src/server/api.ts
@@ -25,7 +25,7 @@ function substituteVariables(
}
export function createNewsletterApi(client: SupabaseClient) {
- const db = client;
+ const _db = client;
return {
// --- Templates ---
@@ -254,7 +254,7 @@ export function createNewsletterApi(client: SupabaseClient) {
for (const recipient of pending) {
try {
// Substitute variables in the body
- const personalizedHtml = substituteVariables(newsletter.body_html, {
+ const _personalizedHtml = substituteVariables(newsletter.body_html, {
first_name: (recipient.name ?? '').split(' ')[0] ?? '',
name: recipient.name ?? '',
email: recipient.email ?? '',
diff --git a/packages/features/site-builder/src/components/portal-login-form.tsx b/packages/features/site-builder/src/components/portal-login-form.tsx
index 06ad61157..5652c0e0e 100644
--- a/packages/features/site-builder/src/components/portal-login-form.tsx
+++ b/packages/features/site-builder/src/components/portal-login-form.tsx
@@ -72,7 +72,7 @@ export function PortalLoginForm({ slug, accountName }: Props) {
router.push(`/club/${slug}/portal/profile`);
router.refresh();
}
- } catch (err) {
+ } catch (_err) {
setError('Verbindungsfehler. Bitte versuchen Sie es erneut.');
} finally {
setLoading(false);
diff --git a/packages/features/site-builder/src/components/site-editor.tsx b/packages/features/site-builder/src/components/site-editor.tsx
index ed5f08735..70c02645c 100644
--- a/packages/features/site-builder/src/components/site-editor.tsx
+++ b/packages/features/site-builder/src/components/site-editor.tsx
@@ -14,7 +14,7 @@ interface Props {
initialData: Record;
}
-export function SiteEditor({ pageId, accountId, initialData }: Props) {
+export function SiteEditor({ pageId, accountId: _accountId, initialData }: Props) {
const { execute: execPublish } = useActionWithToast(publishPage, {
successMessage: 'Seite veröffentlicht',
});
diff --git a/packages/features/site-builder/src/config/puck-config.tsx b/packages/features/site-builder/src/config/puck-config.tsx
index bd9402d25..c20a9ed2b 100644
--- a/packages/features/site-builder/src/config/puck-config.tsx
+++ b/packages/features/site-builder/src/config/puck-config.tsx
@@ -123,7 +123,7 @@ const ContactFormBlock = ({
const MapBlock = ({
latitude,
longitude,
- zoom,
+ zoom: _zoom,
height,
}: {
latitude: number;
diff --git a/packages/features/site-builder/src/server/actions/site-builder-actions.ts b/packages/features/site-builder/src/server/actions/site-builder-actions.ts
index 34f2f6296..5ac2af447 100644
--- a/packages/features/site-builder/src/server/actions/site-builder-actions.ts
+++ b/packages/features/site-builder/src/server/actions/site-builder-actions.ts
@@ -3,7 +3,6 @@
import { z } from 'zod';
import { authActionClient } from '@kit/next/safe-action';
-import { getLogger } from '@kit/shared/logger';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import {
@@ -12,13 +11,12 @@ import {
SiteSettingsSchema,
CreatePostSchema,
UpdatePostSchema,
- NewsletterSubscribeSchema,
} from '../../schema/site.schema';
import { createSiteBuilderApi } from '../api';
export const createPage = authActionClient
.inputSchema(CreatePageSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const api = createSiteBuilderApi(client);
const data = await api.createPage(input, ctx.user.id);
@@ -27,7 +25,7 @@ export const createPage = authActionClient
export const saveDraft = authActionClient
.inputSchema(UpdatePageSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const api = createSiteBuilderApi(client);
const data = await api.updatePage(
@@ -40,7 +38,7 @@ export const saveDraft = authActionClient
export const publishPage = authActionClient
.inputSchema(UpdatePageSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const api = createSiteBuilderApi(client);
const data = await api.updatePage(
@@ -71,7 +69,7 @@ export const updateSiteSettings = authActionClient
export const createPost = authActionClient
.inputSchema(CreatePostSchema)
- .action(async ({ parsedInput: input, ctx }) => {
+ .action(async ({ parsedInput: input, ctx: _ctx }) => {
const client = getSupabaseServerClient();
const api = createSiteBuilderApi(client);
const data = await api.createPost(input, ctx.user.id);
diff --git a/packages/features/sitzungsprotokolle/src/components/protocol-items-list.tsx b/packages/features/sitzungsprotokolle/src/components/protocol-items-list.tsx
index 25ec96228..dd07f1008 100644
--- a/packages/features/sitzungsprotokolle/src/components/protocol-items-list.tsx
+++ b/packages/features/sitzungsprotokolle/src/components/protocol-items-list.tsx
@@ -43,10 +43,10 @@ const STATUS_TRANSITIONS: Record = {
export function ProtocolItemsList({
items,
- protocolId,
- account,
+ protocolId: _protocolId,
+ account: _account,
}: ProtocolItemsListProps) {
- const { execute: executeStatusUpdate, isPending: isUpdating } = useAction(
+ const { execute: executeStatusUpdate, isPending: _isUpdating } = useAction(
updateItemStatus,
{
onSuccess: ({ data }) => {
diff --git a/packages/features/sitzungsprotokolle/src/server/api.ts b/packages/features/sitzungsprotokolle/src/server/api.ts
index 69ad33542..b6eeabc7c 100644
--- a/packages/features/sitzungsprotokolle/src/server/api.ts
+++ b/packages/features/sitzungsprotokolle/src/server/api.ts
@@ -150,7 +150,7 @@ export function createMeetingsApi(client: SupabaseClient) {
return data ?? [];
},
- async createItem(input: CreateProtocolItemInput, userId: string) {
+ async createItem(input: CreateProtocolItemInput, _userId: string) {
const { data, error } = await client
.from('meeting_protocol_items')
.insert({
@@ -168,7 +168,7 @@ export function createMeetingsApi(client: SupabaseClient) {
return data;
},
- async updateItem(input: UpdateProtocolItemInput, userId: string) {
+ async updateItem(input: UpdateProtocolItemInput, _userId: string) {
const updateData: Record = {};
if (input.title !== undefined) updateData.title = input.title;
@@ -191,7 +191,7 @@ export function createMeetingsApi(client: SupabaseClient) {
return data;
},
- async updateItemStatus(input: UpdateItemStatusInput, userId: string) {
+ async updateItemStatus(input: UpdateItemStatusInput, _userId: string) {
const { data, error } = await client
.from('meeting_protocol_items')
.update({
diff --git a/packages/features/verbandsverwaltung/src/components/club-fee-billing-table.tsx b/packages/features/verbandsverwaltung/src/components/club-fee-billing-table.tsx
index 727da7d2b..6a732785e 100644
--- a/packages/features/verbandsverwaltung/src/components/club-fee-billing-table.tsx
+++ b/packages/features/verbandsverwaltung/src/components/club-fee-billing-table.tsx
@@ -29,7 +29,7 @@ interface ClubFeeBillingTableProps {
export function ClubFeeBillingTable({
billings,
- clubId,
+ clubId: _clubId,
}: ClubFeeBillingTableProps) {
const [showPaid, setShowPaid] = useState(false);
diff --git a/packages/features/verbandsverwaltung/src/components/club-notes-list.tsx b/packages/features/verbandsverwaltung/src/components/club-notes-list.tsx
index 28bc73b4a..8090234a4 100644
--- a/packages/features/verbandsverwaltung/src/components/club-notes-list.tsx
+++ b/packages/features/verbandsverwaltung/src/components/club-notes-list.tsx
@@ -33,7 +33,7 @@ const NOTE_ICONS: Record = {
erinnerung: ,
};
-export function ClubNotesList({ notes, clubId }: ClubNotesListProps) {
+export function ClubNotesList({ notes, clubId: _clubId }: ClubNotesListProps) {
const { execute: executeComplete } = useAction(completeClubNote, {
onSuccess: () => {
toast.success('Aufgabe erledigt');