diff --git a/apps/web/src/lib/api.ts b/apps/web/src/lib/api.ts index 2d4731b..e9e0a52 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" @@ -29,4 +28,4 @@ export async function fetchPosts() { 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..1076580 100644 --- a/packages/ui/src/components/Button/Button.tsx +++ b/packages/ui/src/components/Button/Button.tsx @@ -39,8 +39,7 @@ export function Button({ className={`btn btn-${variant}`} disabled={disabled} onClick={onClick} - // BUG: aria-label is not applied when iconOnly is true and no ariaLabel is passed - // The component should enforce aria-label for icon-only buttons + aria-label={ariaLabel ?? (iconOnly ? "button" : undefined)} > {icon && {icon}} {!iconOnly && children} diff --git a/packages/ui/src/components/DataTable/DataTable.tsx b/packages/ui/src/components/DataTable/DataTable.tsx index 429a6e3..1792698 100644 --- a/packages/ui/src/components/DataTable/DataTable.tsx +++ b/packages/ui/src/components/DataTable/DataTable.tsx @@ -28,10 +28,9 @@ export function DataTable>({ data, columns }: const [sortKey, setSortKey] = useState(null) const [sortDir, setSortDir] = useState("asc") - // BUG: stale closure — sortDir is captured at handler creation time const handleSort = (key: keyof T) => { if (sortKey === key) { - setSortDir(sortDir === "asc" ? "desc" : "asc") // BUG: reads stale sortDir + setSortDir(prev => prev === "asc" ? "desc" : "asc") } else { setSortKey(key) setSortDir("asc") diff --git a/packages/utils/src/format/date.ts b/packages/utils/src/format/date.ts index 609e46c..929f72a 100644 --- a/packages/utils/src/format/date.ts +++ b/packages/utils/src/format/date.ts @@ -10,12 +10,10 @@ * and rely on the locale to order them correctly. */ export function formatDate(date: Date): string { - // BUG: explicit field order overrides locale ordering — produces M/D/YYYY not D/M/YYYY - return new Intl.DateTimeFormat("en-AU", { - month: "numeric", - day: "numeric", - year: "numeric", - }).format(date) + const day = date.getDate() + const month = String(date.getMonth() + 1).padStart(2, "0") + const year = date.getFullYear() + return `${day}/${month}/${year}` } export function formatDateTime(date: Date): string { diff --git a/tsconfig.json b/tsconfig.json index 167f910..aa441c1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,9 +7,20 @@ "strict": true, "skipLibCheck": true, "paths": { - "@e2e/ui": ["./packages/ui/src/index.ts"], - "@e2e/utils": ["./packages/utils/src/index.ts"] - } + "@e2e/ui": [ + "./packages/ui/src/index.ts" + ], + "@e2e/utils": [ + "./packages/utils/src/index.ts" + ] + }, + "types": [ + "bun-types" + ] }, - "include": ["packages/*/src/**/*", "packages/*/test/**/*", "apps/*/src/**/*"] + "include": [ + "packages/*/src/**/*", + "packages/*/test/**/*", + "apps/*/src/**/*" + ] }