mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-13 06:32:03 +00:00
perf(ui): harden theme-provider hydration seam + cache per-row Intl formatters
Theme provider now initializes to the SSR-stable default and reconciles the stored preference in a mount effect instead of reading localStorage in the useState initializer — closes the same React #418 hydration seam the sidebar already fixed (the inline script still handles the pre-paint class, so no FOUC). Add a process-wide Intl formatter cache and route the per-row workout/medication list helpers through it so a formatter is constructed once per (locale, options) rather than once per row per render.
This commit is contained in:
1 parent
3fcae204f7
commit
80bbf2ba3b
7 files changed
+80
-29
No files matched your search
@@ -0,0 +1,40 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
|
||||
import { getNumberFormat, getDateTimeFormat } from "../formatter-cache";
|
||||
|
||||
describe("formatter-cache", () => {
|
||||
it("returns the same NumberFormat instance for identical (locale, options)", () => {
|
||||
const a = getNumberFormat("en", { maximumFractionDigits: 2 });
|
||||
const b = getNumberFormat("en", { maximumFractionDigits: 2 });
|
||||
expect(a).toBe(b);
|
||||
});
|
||||
|
||||
it("returns distinct NumberFormat instances for different options", () => {
|
||||
const a = getNumberFormat("en", { maximumFractionDigits: 2 });
|
||||
const b = getNumberFormat("en", { maximumFractionDigits: 0 });
|
||||
expect(a).not.toBe(b);
|
||||
});
|
||||
|
||||
it("returns distinct instances per locale", () => {
|
||||
const a = getNumberFormat("en", { maximumFractionDigits: 1 });
|
||||
const b = getNumberFormat("de", { maximumFractionDigits: 1 });
|
||||
expect(a).not.toBe(b);
|
||||
});
|
||||
|
||||
it("caches DateTimeFormat and still formats correctly", () => {
|
||||
const a = getDateTimeFormat("en-CA", {
|
||||
timeZone: "UTC",
|
||||
year: "numeric",
|
||||
month: "2-digit",
|
||||
day: "2-digit",
|
||||
});
|
||||
const b = getDateTimeFormat("en-CA", {
|
||||
timeZone: "UTC",
|
||||
year: "numeric",
|
||||
month: "2-digit",
|
||||
day: "2-digit",
|
||||
});
|
||||
expect(a).toBe(b);
|
||||
expect(a.format(new Date("2026-05-08T12:00:00Z"))).toBe("2026-05-08");
|
||||
});
|
||||
});
|
||||
Binary file not shown.
Reference in new issue
Block a user