diff --git a/packages/shared-components/src/room-list/RoomListPrimaryFilters/RoomListPrimaryFilters.test.tsx b/packages/shared-components/src/room-list/RoomListPrimaryFilters/RoomListPrimaryFilters.test.tsx index 333e8d6a3b1..53578c5ad65 100644 --- a/packages/shared-components/src/room-list/RoomListPrimaryFilters/RoomListPrimaryFilters.test.tsx +++ b/packages/shared-components/src/room-list/RoomListPrimaryFilters/RoomListPrimaryFilters.test.tsx @@ -68,27 +68,33 @@ describe(" stories", () => { } as unknown as typeof ResizeObserver; }); - function mockFiltersNotWrapping(): void { + async function mockFiltersNotWrapping(): Promise { vi.spyOn(screen.getByText("People"), "offsetLeft", "get").mockReturnValue(0); vi.spyOn(screen.getByText("Rooms"), "offsetLeft", "get").mockReturnValue(30); vi.spyOn(screen.getByText("Unreads"), "offsetLeft", "get").mockReturnValue(60); const listbox = screen.getByRole("listbox", { name: "Room list filters" }); - act(() => resizeCallback([{ target: listbox } as any], {} as ResizeObserver)); + await act(async () => { + resizeCallback([{ target: listbox } as any], {} as ResizeObserver); + await new Promise((resolve) => requestAnimationFrame(() => resolve())); + }); } - function mockUnreadWrapping(): void { + async function mockUnreadWrapping(): Promise { vi.spyOn(screen.getByText("People"), "offsetLeft", "get").mockReturnValue(0); vi.spyOn(screen.getByText("Rooms"), "offsetLeft", "get").mockReturnValue(30); vi.spyOn(screen.getByText("Unreads"), "offsetLeft", "get").mockReturnValue(0); const listbox = screen.getByRole("listbox", { name: "Room list filters" }); - act(() => resizeCallback([{ target: listbox } as any], {} as ResizeObserver)); + await act(async () => { + resizeCallback([{ target: listbox } as any], {} as ResizeObserver); + await new Promise((resolve) => requestAnimationFrame(() => resolve())); + }); } - it("should hide wrapping filters and show chevron", () => { + it("should hide wrapping filters and show chevron", async () => { render(); - mockUnreadWrapping(); + await mockUnreadWrapping(); expect(screen.queryByRole("option", { name: "Unreads" })).toBeNull(); expect(screen.getByRole("button", { name: "Expand filter list" })).toBeInTheDocument(); @@ -97,7 +103,7 @@ describe(" stories", () => { it("should expand and collapse filter list with chevron button", async () => { const user = userEvent.setup(); render(); - mockUnreadWrapping(); + await mockUnreadWrapping(); expect(screen.queryByRole("option", { name: "Unreads" })).toBeNull(); @@ -108,9 +114,9 @@ describe(" stories", () => { expect(screen.queryByRole("option", { name: "Unreads" })).toBeNull(); }); - it("should move active filter to front when collapsed and wrapping", () => { + it("should move active filter to front when collapsed and wrapping", async () => { render(); - mockUnreadWrapping(); + await mockUnreadWrapping(); const listbox = screen.getByRole("listbox", { name: "Room list filters" }); expect(listbox.children[0]).toBe(screen.getByRole("option", { name: "Unreads" })); @@ -119,7 +125,7 @@ describe(" stories", () => { it("should restore original filter order when expanded", async () => { const user = userEvent.setup(); render(); - mockUnreadWrapping(); + await mockUnreadWrapping(); await user.click(screen.getByRole("button", { name: "Expand filter list" })); @@ -127,13 +133,13 @@ describe(" stories", () => { expect(listbox.children[0]).toBe(screen.getByRole("option", { name: "People" })); }); - it("should handle resize from non-wrapping to wrapping", () => { + it("should handle resize from non-wrapping to wrapping", async () => { render(); - mockFiltersNotWrapping(); + await mockFiltersNotWrapping(); expect(screen.queryByRole("button", { name: "Expand filter list" })).toBeNull(); - mockUnreadWrapping(); + await mockUnreadWrapping(); expect(screen.getByRole("button", { name: "Expand filter list" })).toBeInTheDocument(); }); }); diff --git a/packages/shared-components/src/room-list/RoomListPrimaryFilters/useCollapseFilters.ts b/packages/shared-components/src/room-list/RoomListPrimaryFilters/useCollapseFilters.ts index e3fbf74e548..c0ee4892331 100644 --- a/packages/shared-components/src/room-list/RoomListPrimaryFilters/useCollapseFilters.ts +++ b/packages/shared-components/src/room-list/RoomListPrimaryFilters/useCollapseFilters.ts @@ -59,10 +59,15 @@ export function useCollapseFilters( }; hideFilters(ref.current); - const observer = new ResizeObserver((entries) => entries.forEach((entry) => hideFilters(entry.target))); + let rafId = 0; + const observer = new ResizeObserver((entries) => { + cancelAnimationFrame(rafId); + rafId = requestAnimationFrame(() => entries.forEach((entry) => hideFilters(entry.target))); + }); observer.observe(ref.current); return () => { + cancelAnimationFrame(rafId); observer.disconnect(); }; }, [isExpanded, wrappingClassName]); diff --git a/packages/shared-components/src/utils/i18n.tsx b/packages/shared-components/src/utils/i18n.tsx index 460ad8ea260..428eb2053ef 100644 --- a/packages/shared-components/src/utils/i18n.tsx +++ b/packages/shared-components/src/utils/i18n.tsx @@ -408,7 +408,7 @@ interface ICounterpartTranslation { } async function getLanguage(langPath: string): Promise { - console.log("Loading language from", langPath); + if (process.env.NODE_ENV !== "test") console.log("Loading language from", langPath); const res = await fetch(langPath, { method: "GET" }); if (!res.ok) {