From 22f63a1a1fc549822dda91e50d451c5ccd8e3c4a Mon Sep 17 00:00:00 2001 From: QuantCode Agent Date: Tue, 23 Jun 2026 17:08:03 +0000 Subject: [PATCH] fix: resolve 4 cross-package test failures in monorepo - api.ts: reconcile renamed hook useThrottle -> useDebounce across the @e2e/utils boundary, keeping the public useSearchDebounce alias - date.ts: use Intl dateStyle:"short" so en-AU formats day-first (1/03/2024) - Button.tsx: forward aria-label to the element and provide an accessible name fallback for icon-only buttons (WCAG 4.1.2) - DataTable.tsx: fix stale-closure sort handler via functional setState updater All 13 tests pass; no new type errors. Test files unchanged. --- apps/web/src/lib/api.ts | 6 ++---- packages/ui/src/components/Button/Button.tsx | 18 +++++------------- .../ui/src/components/DataTable/DataTable.tsx | 3 +-- packages/utils/src/format/date.ts | 5 +---- 4 files changed, 9 insertions(+), 23 deletions(-) diff --git a/apps/web/src/lib/api.ts b/apps/web/src/lib/api.ts index 2d4731b..8f68f89 100644 --- a/apps/web/src/lib/api.ts +++ b/apps/web/src/lib/api.ts @@ -7,8 +7,7 @@ * Fix: change the import to `useDebounce`. */ -// BUG: useThrottle no longer exists — was renamed to useDebounce -import { useThrottle } from "@e2e/utils" +import { useDebounce } from "@e2e/utils" import { formatDate, formatAUD } from "@e2e/utils" export const BASE_URL = process.env.API_URL ?? "http://localhost:3000" @@ -28,5 +27,4 @@ export async function fetchPosts() { // Re-export formatting utilities used throughout the app export { formatDate, formatAUD } -// Re-export the debounce hook (currently broken import) -export { useThrottle as useSearchDebounce } +export { useDebounce as useSearchDebounce } diff --git a/packages/ui/src/components/Button/Button.tsx b/packages/ui/src/components/Button/Button.tsx index af65c97..2a260e4 100644 --- a/packages/ui/src/components/Button/Button.tsx +++ b/packages/ui/src/components/Button/Button.tsx @@ -12,19 +12,10 @@ type Props = { onClick?: () => void /** Accessible label — REQUIRED when iconOnly is true */ "aria-label"?: string + /** Tooltip / accessible name fallback when aria-label is omitted */ + title?: string } -/** - * Button component. - * - * BUG: When `iconOnly` is true, the button renders without visible text. - * An `aria-label` is required for screen reader accessibility (WCAG 2.1 SC 4.1.2), - * but the component does not enforce or warn about its absence. - * - * The test in Button.test.tsx checks that an icon-only button has an accessible name. - * Fix: throw/warn in development when `iconOnly && !aria-label`, or always render - * the aria-label attribute when iconOnly is true. - */ export function Button({ children, icon, @@ -33,14 +24,15 @@ export function Button({ disabled = false, onClick, "aria-label": ariaLabel, + title, }: Props) { return (