feat: pre-existing local changes — fischerei, verband, modules, members, packages
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 6m20s
Workflow / ⚫️ Test (push) Has been skipped

Commits all remaining uncommitted local work:

- apps/web: fischerei, verband, modules, members-cms, documents,
  newsletter, meetings, site-builder, courses, bookings, events,
  finance pages and components
- apps/web: marketing page updates, layout, paths config,
  next.config.mjs, styles/makerkit.css
- apps/web/i18n: documents, fischerei, marketing, verband (de+en)
- packages/features: finance, fischerei, member-management,
  module-builder, newsletter, sitzungsprotokolle, verbandsverwaltung
  server APIs and components
- packages/ui: button.tsx updates
- pnpm-lock.yaml
This commit is contained in:
Zaid Marzguioui
2026-04-02 01:19:54 +02:00
parent a1719671df
commit b26e5aaafa
153 changed files with 2329 additions and 1227 deletions

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -18,6 +20,7 @@ export default async function CatchBooksPage({ params, searchParams }: Props) {
const { account } = await params;
const search = await searchParams;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -48,7 +51,7 @@ export default async function CatchBooksPage({ params, searchParams }: Props) {
});
return (
<CmsPageShell account={account} title="Fischerei - Fangbücher">
<CmsPageShell account={account} title={t('pages.catchBooksTitle')}>
<FischereiTabNavigation account={account} activeTab="catch-books" />
<ListToolbar
searchPlaceholder="Mitglied suchen..."

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -15,6 +17,7 @@ interface Props {
export default async function NewCompetitionPage({ params }: Props) {
const { account } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -33,7 +36,7 @@ export default async function NewCompetitionPage({ params }: Props) {
}));
return (
<CmsPageShell account={account} title="Neuer Wettbewerb">
<CmsPageShell account={account} title={t('pages.newCompetitionTitle')}>
<FischereiTabNavigation account={account} activeTab="competitions" />
<CreateCompetitionForm
accountId={acct.id}

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -21,6 +23,7 @@ export default async function CompetitionsPage({
const { account } = await params;
const search = await searchParams;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -50,7 +53,7 @@ export default async function CompetitionsPage({
});
return (
<CmsPageShell account={account} title="Fischerei - Wettbewerbe">
<CmsPageShell account={account} title={t('pages.competitionsTitle')}>
<FischereiTabNavigation account={account} activeTab="competitions" />
<ListToolbar
showSearch={false}

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -15,6 +17,7 @@ interface Props {
export default async function NewLeasePage({ params }: Props) {
const { account } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -33,7 +36,7 @@ export default async function NewLeasePage({ params }: Props) {
}));
return (
<CmsPageShell account={account} title="Neue Pacht">
<CmsPageShell account={account} title={t('pages.newLeaseTitle')}>
<FischereiTabNavigation account={account} activeTab="leases" />
<CreateLeaseForm accountId={acct.id} account={account} waters={waters} />
</CmsPageShell>

View File

@@ -1,6 +1,7 @@
import Link from 'next/link';
import { Plus } from 'lucide-react';
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
@@ -23,6 +24,7 @@ export default async function LeasesPage({ params, searchParams }: Props) {
const { account } = await params;
const search = await searchParams;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -58,22 +60,21 @@ export default async function LeasesPage({ params, searchParams }: Props) {
];
return (
<CmsPageShell account={account} title="Fischerei - Pachten">
<CmsPageShell account={account} title={t('pages.leasesTitle')}>
<FischereiTabNavigation account={account} activeTab="leases" />
<div className="flex w-full flex-col gap-6">
<div className="flex items-center justify-between">
<div>
<h1 className="text-2xl font-bold">Pachten</h1>
<p className="text-muted-foreground">
Gewässerpachtverträge verwalten
</p>
</div>
<Link href={`/home/${account}/fischerei/leases/new`}>
<Button size="sm" data-test="leases-new-btn">
<Button size="sm" data-test="leases-new-btn" asChild>
<Link href={`/home/${account}/fischerei/leases/new`}>
<Plus className="mr-2 h-4 w-4" />
Neue Pacht
</Button>
</Link>
</Link>
</Button>
</div>
<ListToolbar
showSearch={false}

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -15,6 +17,7 @@ interface PageProps {
export default async function FischereiPage({ params }: PageProps) {
const { account } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -28,7 +31,7 @@ export default async function FischereiPage({ params }: PageProps) {
const stats = await api.getDashboardStats(acct.id);
return (
<CmsPageShell account={account} title="Fischerei">
<CmsPageShell account={account} title={t('pages.overviewTitle')}>
<FischereiTabNavigation account={account} activeTab="overview" />
<FischereiDashboard stats={stats} account={account} />
</CmsPageShell>

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -15,6 +17,7 @@ interface Props {
export default async function NewPermitPage({ params }: Props) {
const { account } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -33,7 +36,7 @@ export default async function NewPermitPage({ params }: Props) {
}));
return (
<CmsPageShell account={account} title="Neuer Erlaubnisschein">
<CmsPageShell account={account} title={t('pages.newPermitTitle')}>
<FischereiTabNavigation account={account} activeTab="permits" />
<CreatePermitForm accountId={acct.id} account={account} waters={waters} />
</CmsPageShell>

View File

@@ -1,6 +1,7 @@
import Link from 'next/link';
import { Plus } from 'lucide-react';
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
@@ -20,6 +21,7 @@ interface Props {
export default async function PermitsPage({ params }: Props) {
const { account } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -33,22 +35,21 @@ export default async function PermitsPage({ params }: Props) {
const permits = await api.listPermits(acct.id);
return (
<CmsPageShell account={account} title="Fischerei - Erlaubnisscheine">
<CmsPageShell account={account} title={t('pages.permitsTitle')}>
<FischereiTabNavigation account={account} activeTab="permits" />
<div className="flex w-full flex-col gap-6">
<div className="flex items-center justify-between">
<div>
<h1 className="text-2xl font-bold">Erlaubnisscheine</h1>
<p className="text-muted-foreground">
Erlaubnisscheine und Gewässerkarten verwalten
</p>
</div>
<Link href={`/home/${account}/fischerei/permits/new`}>
<Button size="sm" data-test="permits-new-btn">
<Button size="sm" data-test="permits-new-btn" asChild>
<Link href={`/home/${account}/fischerei/permits/new`}>
<Plus className="mr-2 h-4 w-4" />
Neuer Erlaubnisschein
</Button>
</Link>
</Link>
</Button>
</div>
<PermitsDataTable
data={permits as Array<Record<string, unknown>>}

View File

@@ -1,5 +1,7 @@
import { notFound } from 'next/navigation';
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -17,6 +19,7 @@ interface Props {
export default async function EditSpeciesPage({ params }: Props) {
const { account, speciesId } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -37,7 +40,7 @@ export default async function EditSpeciesPage({ params }: Props) {
}
return (
<CmsPageShell account={account} title="Fischart bearbeiten">
<CmsPageShell account={account} title={t('pages.editSpeciesTitle')}>
<FischereiTabNavigation account={account} activeTab="species" />
<CreateSpeciesForm
accountId={acct.id}

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import {
FischereiTabNavigation,
CreateSpeciesForm,
@@ -14,6 +16,7 @@ interface Props {
export default async function NewSpeciesPage({ params }: Props) {
const { account } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -24,7 +27,7 @@ export default async function NewSpeciesPage({ params }: Props) {
if (!acct) return <AccountNotFound />;
return (
<CmsPageShell account={account} title="Neue Fischart">
<CmsPageShell account={account} title={t('pages.newSpeciesTitle')}>
<FischereiTabNavigation account={account} activeTab="species" />
<CreateSpeciesForm accountId={acct.id} account={account} />
</CmsPageShell>

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -18,6 +20,7 @@ export default async function SpeciesPage({ params, searchParams }: Props) {
const { account } = await params;
const search = await searchParams;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -41,7 +44,7 @@ export default async function SpeciesPage({ params, searchParams }: Props) {
});
return (
<CmsPageShell account={account} title="Fischerei - Fischarten">
<CmsPageShell account={account} title={t('pages.speciesTitle')}>
<FischereiTabNavigation account={account} activeTab="species" />
<ListToolbar
searchPlaceholder="Fischart suchen..."

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { FischereiTabNavigation } from '@kit/fischerei/components';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card';
@@ -12,6 +14,7 @@ interface Props {
export default async function StatisticsPage({ params }: Props) {
const { account } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -22,11 +25,10 @@ export default async function StatisticsPage({ params }: Props) {
if (!acct) return <AccountNotFound />;
return (
<CmsPageShell account={account} title="Fischerei - Statistiken">
<CmsPageShell account={account} title={t('pages.statisticsTitle')}>
<FischereiTabNavigation account={account} activeTab="statistics" />
<div className="flex w-full flex-col gap-6">
<div>
<h1 className="text-2xl font-bold">Statistiken</h1>
<p className="text-muted-foreground">
Fangstatistiken und Auswertungen
</p>

View File

@@ -1,5 +1,7 @@
import { notFound } from 'next/navigation';
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -17,6 +19,7 @@ interface Props {
export default async function EditStockingPage({ params }: Props) {
const { account, stockingId } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -53,7 +56,7 @@ export default async function EditStockingPage({ params }: Props) {
}));
return (
<CmsPageShell account={account} title="Besatz bearbeiten">
<CmsPageShell account={account} title={t('pages.editStockingTitle')}>
<FischereiTabNavigation account={account} activeTab="stocking" />
<CreateStockingForm
accountId={acct.id}

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -15,6 +17,7 @@ interface Props {
export default async function NewStockingPage({ params }: Props) {
const { account } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -43,7 +46,7 @@ export default async function NewStockingPage({ params }: Props) {
}));
return (
<CmsPageShell account={account} title="Besatz eintragen">
<CmsPageShell account={account} title={t('pages.newStockingTitle')}>
<FischereiTabNavigation account={account} activeTab="stocking" />
<CreateStockingForm
accountId={acct.id}

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -18,6 +20,7 @@ export default async function StockingPage({ params, searchParams }: Props) {
const { account } = await params;
const search = await searchParams;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -71,7 +74,7 @@ export default async function StockingPage({ params, searchParams }: Props) {
];
return (
<CmsPageShell account={account} title="Fischerei - Besatz">
<CmsPageShell account={account} title={t('pages.stockingTitle')}>
<FischereiTabNavigation account={account} activeTab="stocking" />
<ListToolbar
showSearch={false}

View File

@@ -1,5 +1,7 @@
import { notFound } from 'next/navigation';
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -17,6 +19,7 @@ interface Props {
export default async function EditWaterPage({ params }: Props) {
const { account, waterId } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -37,7 +40,7 @@ export default async function EditWaterPage({ params }: Props) {
}
return (
<CmsPageShell account={account} title="Gewässer bearbeiten">
<CmsPageShell account={account} title={t('pages.editWaterTitle')}>
<FischereiTabNavigation account={account} activeTab="waters" />
<CreateWaterForm accountId={acct.id} account={account} water={water} />
</CmsPageShell>

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import {
FischereiTabNavigation,
CreateWaterForm,
@@ -14,6 +16,7 @@ interface Props {
export default async function NewWaterPage({ params }: Props) {
const { account } = await params;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -24,7 +27,7 @@ export default async function NewWaterPage({ params }: Props) {
if (!acct) return <AccountNotFound />;
return (
<CmsPageShell account={account} title="Neues Gewässer">
<CmsPageShell account={account} title={t('pages.newWaterTitle')}>
<FischereiTabNavigation account={account} activeTab="waters" />
<CreateWaterForm accountId={acct.id} account={account} />
</CmsPageShell>

View File

@@ -1,3 +1,5 @@
import { getTranslations } from 'next-intl/server';
import { createFischereiApi } from '@kit/fischerei/api';
import {
FischereiTabNavigation,
@@ -17,6 +19,7 @@ export default async function WatersPage({ params, searchParams }: Props) {
const { account } = await params;
const search = await searchParams;
const client = getSupabaseServerClient();
const t = await getTranslations('fischerei');
const { data: acct } = await client
.from('accounts')
@@ -36,7 +39,7 @@ export default async function WatersPage({ params, searchParams }: Props) {
});
return (
<CmsPageShell account={account} title="Fischerei - Gewässer">
<CmsPageShell account={account} title={t('pages.watersTitle')}>
<FischereiTabNavigation account={account} activeTab="waters" />
<WatersDataTable
data={result.data}