From 1db2a76ce5a93eaceb965d703c4117bdf3450dab Mon Sep 17 00:00:00 2001 From: Shunsuke <142958970+imshunsuke@users.noreply.github.com> Date: Thu, 3 Sep 2026 12:52:10 +0800 Subject: [PATCH 1/2] fix: update Grid when dir changes --- lib/core/useIsRtl.test.ts | 21 +++++++++++++++++++++ lib/core/useIsRtl.ts | 8 ++++---- 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 lib/core/useIsRtl.test.ts diff --git a/lib/core/useIsRtl.test.ts b/lib/core/useIsRtl.test.ts new file mode 100644 index 00000000..086a48ea --- /dev/null +++ b/lib/core/useIsRtl.test.ts @@ -0,0 +1,21 @@ +import { renderHook } from "@testing-library/react"; +import { describe, expect, test } from "vitest"; +import { useIsRtl } from "./useIsRtl"; + +describe("useIsRtl", () => { + test("should update when an explicit direction changes", () => { + const element = document.createElement("div"); + const { result, rerender } = renderHook( + (dir: "ltr" | "rtl") => useIsRtl(element, dir), + { initialProps: "ltr" as "ltr" | "rtl" } + ); + + expect(result.current).toBe(false); + + rerender("rtl"); + expect(result.current).toBe(true); + + rerender("ltr"); + expect(result.current).toBe(false); + }); +}); diff --git a/lib/core/useIsRtl.ts b/lib/core/useIsRtl.ts index ee687b5f..b9f35f89 100644 --- a/lib/core/useIsRtl.ts +++ b/lib/core/useIsRtl.ts @@ -8,10 +8,10 @@ export function useIsRtl( const [value, setValue] = useState(dir === "rtl"); useLayoutEffect(() => { - if (element) { - if (!dir) { - setValue(isRtl(element)); - } + if (dir) { + setValue(dir === "rtl"); + } else if (element) { + setValue(isRtl(element)); } }, [dir, element]); From 7224be724b23b39cbab16314bec1b86667500666 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Sat, 5 Sep 2026 09:14:16 -0400 Subject: [PATCH 2/2] Add unit tests --- lib/core/useIsRtl.test.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/core/useIsRtl.test.ts b/lib/core/useIsRtl.test.ts index 086a48ea..0296fa3b 100644 --- a/lib/core/useIsRtl.test.ts +++ b/lib/core/useIsRtl.test.ts @@ -3,8 +3,30 @@ import { describe, expect, test } from "vitest"; import { useIsRtl } from "./useIsRtl"; describe("useIsRtl", () => { + test("should read the DOM element's direction when no explicit prop provided", () => { + const ltrElement = document.createElement("div"); + ltrElement.dir = "ltr"; + + const rtlElement = document.createElement("div"); + rtlElement.dir = "rtl"; + + const { result, rerender } = renderHook( + (element: HTMLElement) => useIsRtl(element, undefined), + { initialProps: ltrElement } + ); + + expect(result.current).toBe(false); + + rerender(rtlElement); + expect(result.current).toBe(true); + + rerender(ltrElement); + expect(result.current).toBe(false); + }); + test("should update when an explicit direction changes", () => { const element = document.createElement("div"); + const { result, rerender } = renderHook( (dir: "ltr" | "rtl") => useIsRtl(element, dir), { initialProps: "ltr" as "ltr" | "rtl" }