From 0c9f3f86359e44b10cafae51c5e36e42ed25df0d Mon Sep 17 00:00:00 2001 From: root Date: Sun, 28 Jun 2026 01:21:36 -0400 Subject: [PATCH] fix: resolve TS18046 errors for React 19 element props type React 19 types React.ReactElement props as unknown instead of any. Test helper functions that access element.props.children, .className, or .href need explicit props type parameters on React.ReactElement and isValidElement. Changes: - admin/PublicShell.test.ts: add WithChildren type, use React.ReactElement - dashboard/PublicShell.test.ts: same pattern for childTypes and contentWrapper - dashboard/StatCard.test.ts: add ElementWithClass type for className access - dashboard/public-auth-pages.test.ts: add ElementWithHref type for href access No any, @ts-ignore, or type assertion bypass used. --- apps/admin/src/components/PublicShell.test.ts | 4 +++- apps/dashboard/src/app/public-auth-pages.test.ts | 8 +++++--- apps/dashboard/src/components/layout/PublicShell.test.ts | 6 ++++-- apps/dashboard/src/components/ui/StatCard.test.ts | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/admin/src/components/PublicShell.test.ts b/apps/admin/src/components/PublicShell.test.ts index 25acbbd..9e5828f 100644 --- a/apps/admin/src/components/PublicShell.test.ts +++ b/apps/admin/src/components/PublicShell.test.ts @@ -6,7 +6,9 @@ vi.mock('@/components/PublicFooter', () => ({ default: function MockAdminFooter( import PublicShell from './PublicShell' -function childTypes(node: React.ReactElement): string[] { +type WithChildren = { children?: React.ReactNode } + +function childTypes(node: React.ReactElement): string[] { return React.Children.toArray(node.props.children).filter(isValidElement).map((child) => { const type = child.type as any if (typeof type === 'string') return type diff --git a/apps/dashboard/src/app/public-auth-pages.test.ts b/apps/dashboard/src/app/public-auth-pages.test.ts index 7ad59c2..7efd562 100644 --- a/apps/dashboard/src/app/public-auth-pages.test.ts +++ b/apps/dashboard/src/app/public-auth-pages.test.ts @@ -19,10 +19,12 @@ function collectText(node: unknown): string[] { return []; } +type ElementWithHref = { children?: React.ReactNode; href?: string; embedded?: boolean } + function findElement( node: unknown, - predicate: (element: React.ReactElement) => boolean, -): React.ReactElement | null { + predicate: (element: React.ReactElement) => boolean, +): React.ReactElement | null { if (node === null || node === undefined || typeof node === "boolean") return null; if (Array.isArray(node)) { @@ -32,7 +34,7 @@ function findElement( } return null; } - if (!isValidElement<{ children?: React.ReactNode }>(node)) return null; + if (!isValidElement(node)) return null; if (predicate(node)) return node; return findElement(node.props.children, predicate); } diff --git a/apps/dashboard/src/components/layout/PublicShell.test.ts b/apps/dashboard/src/components/layout/PublicShell.test.ts index b353672..4ee4234 100644 --- a/apps/dashboard/src/components/layout/PublicShell.test.ts +++ b/apps/dashboard/src/components/layout/PublicShell.test.ts @@ -6,7 +6,9 @@ vi.mock('@/components/layout/PublicFooter', () => ({ default: function MockPubli import PublicShell from './PublicShell' -function childTypes(node: React.ReactElement): string[] { +type WithChildren = { children?: React.ReactNode } + +function childTypes(node: React.ReactElement): string[] { return React.Children.toArray(node.props.children).filter(isValidElement).map((child) => { const type = child.type as any if (typeof type === 'string') return type @@ -26,7 +28,7 @@ describe('dashboard PublicShell', () => { const shell = PublicShell({ embedded: true, children: React.createElement('main', { id: 'content' }) }) expect(childTypes(shell)).toEqual(['div']) - const contentWrapper = React.Children.toArray(shell.props.children).find(isValidElement) as React.ReactElement + const contentWrapper = React.Children.toArray(shell.props.children).find(isValidElement) as React.ReactElement expect(contentWrapper.props.children).toEqual(React.createElement('main', { id: 'content' })) }) }) diff --git a/apps/dashboard/src/components/ui/StatCard.test.ts b/apps/dashboard/src/components/ui/StatCard.test.ts index 9cac3a6..a0f3a7e 100644 --- a/apps/dashboard/src/components/ui/StatCard.test.ts +++ b/apps/dashboard/src/components/ui/StatCard.test.ts @@ -11,10 +11,12 @@ function collectText(node: unknown): string[] { return [] } -function collectElements(node: unknown): React.ReactElement[] { +type ElementWithClass = { children?: React.ReactNode; className?: string } + +function collectElements(node: unknown): React.ReactElement[] { if (node === null || node === undefined || typeof node === 'boolean') return [] if (Array.isArray(node)) return node.flatMap(collectElements) - if (!isValidElement<{ children?: React.ReactNode }>(node)) return [] + if (!isValidElement(node)) return [] return [node, ...collectElements(node.props.children)] }