diff --git a/packages/surveys/src/components/general/render-survey.test.tsx b/packages/surveys/src/components/general/render-survey.test.tsx
index 56dd9a0956..7b8f0f2eb8 100644
--- a/packages/surveys/src/components/general/render-survey.test.tsx
+++ b/packages/surveys/src/components/general/render-survey.test.tsx
@@ -23,10 +23,26 @@ vi.mock("./survey", () => ({
},
}));
+// Mock ResizeObserver
+let resizeCallback: Function | undefined;
+const ResizeObserverMock = vi.fn((callback) => {
+ resizeCallback = callback;
+ return {
+ observe: vi.fn(),
+ unobserve: vi.fn(),
+ disconnect: vi.fn(),
+ };
+});
+global.ResizeObserver = ResizeObserverMock as any;
+
describe("RenderSurvey", () => {
beforeEach(() => {
surveySpy.mockClear();
vi.useFakeTimers();
+ // Reset styles on documentElement before each test
+ document.documentElement.style.removeProperty("--fb-survey-card-max-height");
+ document.documentElement.style.removeProperty("--fb-survey-card-min-height");
+ resizeCallback = undefined; // Reset callback for each test
});
afterEach(() => {
@@ -155,12 +171,14 @@ describe("RenderSurvey", () => {
mode: "modal",
} as any;
- const { container } = render();
- const surveyContainerWrapper = container.querySelector('[data-testid="container"]');
- expect(surveyContainerWrapper).toHaveStyle({
- "--fb-survey-card-max-height": "56dvh",
- "--fb-survey-card-min-height": "0dvh",
- });
+ render();
+ // Manually trigger the ResizeObserver callback if it was captured
+ if (resizeCallback) {
+ resizeCallback();
+ }
+
+ expect(document.documentElement.style.getPropertyValue("--fb-survey-card-max-height")).toBe("56dvh");
+ expect(document.documentElement.style.getPropertyValue("--fb-survey-card-min-height")).toBe("0");
});
test("should apply correct styles for app (non-link) surveys", () => {
@@ -175,11 +193,13 @@ describe("RenderSurvey", () => {
mode: "modal",
} as any;
- const { container } = render();
- const surveyContainerWrapper = container.querySelector('[data-testid="container"]');
- expect(surveyContainerWrapper).toHaveStyle({
- "--fb-survey-card-max-height": "25dvh",
- "--fb-survey-card-min-height": "25dvh",
- });
+ render();
+ // Manually trigger the ResizeObserver callback if it was captured
+ if (resizeCallback) {
+ resizeCallback();
+ }
+
+ expect(document.documentElement.style.getPropertyValue("--fb-survey-card-max-height")).toBe("40dvh");
+ expect(document.documentElement.style.getPropertyValue("--fb-survey-card-min-height")).toBe("40dvh");
});
});
diff --git a/packages/surveys/src/components/general/render-survey.tsx b/packages/surveys/src/components/general/render-survey.tsx
index 0cf02957ab..bf3d32a229 100644
--- a/packages/surveys/src/components/general/render-survey.tsx
+++ b/packages/surveys/src/components/general/render-survey.tsx
@@ -5,38 +5,30 @@ import { Survey } from "./survey";
export function RenderSurvey(props: Readonly) {
const [isOpen, setIsOpen] = useState(true);
- const [isDesktop, setIsDesktop] = useState(false);
// Check viewport width on mount and resize
- useEffect(() => {
- const checkViewportWidth = () => {
- setIsDesktop(window.innerWidth > 768);
- };
- checkViewportWidth();
- window.addEventListener("resize", checkViewportWidth);
-
- return () => {
- window.removeEventListener("resize", checkViewportWidth);
- };
- }, []);
-
- // Determine styles based on survey type
useEffect(() => {
const root = document.documentElement;
- if (props.survey.type === "link") {
- root.style.setProperty("--fb-survey-card-max-height", isDesktop ? "56dvh" : "60dvh");
- root.style.setProperty("--fb-survey-card-min-height", isDesktop ? "0" : "42dvh");
- } else {
- root.style.setProperty("--fb-survey-card-max-height", "40dvh");
- root.style.setProperty("--fb-survey-card-min-height", "40dvh");
- }
+ const resizeObserver = new ResizeObserver(() => {
+ const isDesktop = window.innerWidth > 768;
+
+ if (props.survey.type === "link") {
+ root.style.setProperty("--fb-survey-card-max-height", isDesktop ? "56dvh" : "60dvh");
+ root.style.setProperty("--fb-survey-card-min-height", isDesktop ? "0" : "42dvh");
+ } else {
+ root.style.setProperty("--fb-survey-card-max-height", "40dvh");
+ root.style.setProperty("--fb-survey-card-min-height", "40dvh");
+ }
+ });
+
+ resizeObserver.observe(document.body);
- // Clean up when component unmounts
return () => {
+ resizeObserver.disconnect();
root.style.removeProperty("--fb-survey-card-max-height");
root.style.removeProperty("--fb-survey-card-min-height");
};
- }, [props.survey.type, isDesktop]);
+ }, [props.survey.type]);
const close = () => {
setIsOpen(false);