Fix all TypeScript errors: restore proper types and typed route casts
Some checks failed
Build & Push Docker Images / lint (push) Successful in 1m16s
Build & Push Docker Images / build-and-push (push) Failing after 4m42s

- Restore `as any` casts for Next.js typedRoutes on dynamic routes
- Use proper types for PDF templates, invoice/expense data, DB schema
- Fix PgColumn casts in sort helpers for expenses/invoices
- Add null guards for optional port/client in record-export
- Fix vitest config (remove invalid poolOptions)
- Lint: 0 errors, TypeScript: 0 errors

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-26 12:29:55 +01:00
parent e847fd0261
commit 082d4f20e3
30 changed files with 96 additions and 71 deletions

View File

@@ -83,7 +83,8 @@ export function Breadcrumbs() {
<BreadcrumbItem>
<BreadcrumbLink asChild>
<Link
href={`/${currentPortSlug}/dashboard`}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
href={`/${currentPortSlug}/dashboard` as any}
className="text-muted-foreground hover:text-foreground transition-colors"
>
{currentPort.name}
@@ -108,7 +109,8 @@ export function Breadcrumbs() {
) : (
<BreadcrumbLink asChild>
<Link
href={crumb.href}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
href={crumb.href as any}
className="text-muted-foreground hover:text-foreground transition-colors"
>
{crumb.label}

View File

@@ -36,7 +36,8 @@ export function PortSwitcher({ ports }: PortSwitcherProps) {
queryClient.invalidateQueries();
// Navigate to the selected port's dashboard
router.push(`/${port.slug}/dashboard`);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
router.push(`/${port.slug}/dashboard` as any);
}
return (

View File

@@ -112,7 +112,8 @@ function NavItemLink({
}) {
const content = (
<Link
href={item.href}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
href={item.href as any}
className={cn(
'flex items-center gap-3 px-3 py-2 rounded-md text-sm font-medium transition-colors duration-150',
'text-[#cdcfd6] hover:bg-[#171f35] hover:text-white',

View File

@@ -64,16 +64,20 @@ export function Topbar({ ports }: TopbarProps) {
<DropdownMenuContent align="end" className="w-44">
<DropdownMenuLabel className="text-xs text-muted-foreground">Create</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuItem onClick={() => router.push(`${base}/clients/new`)}>
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
<DropdownMenuItem onClick={() => router.push(`${base}/clients/new` as any)}>
New Client
</DropdownMenuItem>
<DropdownMenuItem onClick={() => router.push(`${base}/interests/new`)}>
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
<DropdownMenuItem onClick={() => router.push(`${base}/interests/new` as any)}>
New Interest
</DropdownMenuItem>
<DropdownMenuItem onClick={() => router.push(`${base}/expenses/new`)}>
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
<DropdownMenuItem onClick={() => router.push(`${base}/expenses/new` as any)}>
New Expense
</DropdownMenuItem>
<DropdownMenuItem onClick={() => router.push(`${base}/reminders/new`)}>
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
<DropdownMenuItem onClick={() => router.push(`${base}/reminders/new` as any)}>
New Reminder
</DropdownMenuItem>
</DropdownMenuContent>
@@ -99,11 +103,13 @@ export function Topbar({ ports }: TopbarProps) {
<DropdownMenuContent align="end" className="w-52">
<DropdownMenuLabel>My Account</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuItem onClick={() => router.push(`${base}/settings/profile`)}>
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
<DropdownMenuItem onClick={() => router.push(`${base}/settings/profile` as any)}>
<User className="w-4 h-4 mr-2" />
Profile
</DropdownMenuItem>
<DropdownMenuItem onClick={() => router.push(`${base}/settings`)}>
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
<DropdownMenuItem onClick={() => router.push(`${base}/settings` as any)}>
<Settings className="w-4 h-4 mr-2" />
Settings
</DropdownMenuItem>