fix: QA audit — lint cleanup, i18n fixes, module visibility, sidebar UX
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 5m40s
Workflow / ⚫️ Test (push) Has been skipped

- Fix 97 lint errors → 0 (unused imports, params, variables across 40+ files)
- Fix i18n key format: colon → dot notation for next-intl compatibility
- Add missing i18n keys (routes.application, routes.home, confirm)
- Fix module visibility: sidebar now respects per-account DB features
- Fix inject function: use dot-notation keys, add collapsed:true defaults
- Fix ConfirmDialog: use useTranslations instead of hardcoded German defaults
- Fix events page: replace placeholder 'Beschreibung' with proper description
- Fix Dockerfile: add NEXT_PUBLIC_CI ARG for Docker builds
- Collapse secondary sidebar sections by default for cleaner UX
This commit is contained in:
Zaid Marzguioui
2026-04-02 14:39:20 +02:00
parent c6d564836f
commit 0bd5d0cf42
56 changed files with 387 additions and 234 deletions

View File

@@ -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';

View File

@@ -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';

View File

@@ -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';

View File

@@ -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);

View File

@@ -1154,7 +1154,7 @@ export function createFischereiApi(client: SupabaseClient<Database>) {
return data;
},
async updateCompetition(input: UpdateCompetitionInput, userId: string) {
async updateCompetition(input: UpdateCompetitionInput, _userId: string) {
const updateData: Record<string, unknown> = {};
if (input.name !== undefined) updateData.name = input.name;