Skip to content

Commit

Permalink
fix: remove changing title in LoginPageLayout (#1111)
Browse files Browse the repository at this point in the history
fix: remove changing title in `LoginPageLayout`

BREAKING CHANGE: Document title no longer changes when `LoginPageLayout` renders.
  • Loading branch information
vladimir-cucu committed Aug 15, 2024
1 parent 3860726 commit 10e4fe7
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 6 deletions.
86 changes: 86 additions & 0 deletions src/components/LoginPageLayout/LoginPageLayout.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import React, { useLayoutEffect, useState } from "react";
import { render, screen, within } from "@testing-library/react";

import LoginPageLayout from "./LoginPageLayout";
import userEvent from "@testing-library/user-event";

it("should display the default logo", () => {
render(<LoginPageLayout title="Login page" />);
const link = screen.getByRole("link", { name: "Logo Canonical" });
expect(within(link).getByRole("img", { name: "Logo" })).toHaveAttribute(
"src",
"https://assets.ubuntu.com/v1/82818827-CoF_white.svg"
);
});

it("should display a custom logo", () => {
render(
<LoginPageLayout
title="Login page"
logo={{ src: "logo.png", title: "My logo", url: "/" }}
/>
);
const link = screen.getByRole("link", { name: "Logo My logo" });
expect(within(link).getByRole("img", { name: "Logo" })).toHaveAttribute(
"src",
"logo.png"
);
});

it("should display the title", () => {
render(<LoginPageLayout title="Login page" />);
expect(
screen.getByRole("heading", { name: "Login page" })
).toBeInTheDocument();
});

it("should add and then remove is-paper class to body if initially is-paper wasn't present", async () => {
const NoInitialIsPaperComponent = () => {
const [displayLogin, setDisplayLogin] = useState(false);
return (
<div>
{displayLogin ? (
<>
<LoginPageLayout title="Login page" />
<button onClick={() => setDisplayLogin(false)}>Remove login</button>
</>
) : (
<button onClick={() => setDisplayLogin(true)}>Display login</button>
)}
</div>
);
};
render(<NoInitialIsPaperComponent />);
expect(document.querySelector("body")).not.toHaveClass("is-paper");
await userEvent.click(screen.getByRole("button", { name: "Display login" }));
expect(document.querySelector("body")).toHaveClass("is-paper");
await userEvent.click(screen.getByRole("button", { name: "Remove login" }));
expect(document.querySelector("body")).not.toHaveClass("is-paper");
});

it("shouldn't remove is-paper class to body if initially is-paper was present", async () => {
const InitialIsPaperComponent = () => {
const [displayLogin, setDisplayLogin] = useState(false);
useLayoutEffect(() => {
document.querySelector("body")?.classList.add("is-paper");
}, []);
return (
<div>
{displayLogin ? (
<>
<LoginPageLayout title="Login page" />
<button onClick={() => setDisplayLogin(false)}>Remove login</button>
</>
) : (
<button onClick={() => setDisplayLogin(true)}>Display login</button>
)}
</div>
);
};
render(<InitialIsPaperComponent />);
expect(document.querySelector("body")).toHaveClass("is-paper");
await userEvent.click(screen.getByRole("button", { name: "Display login" }));
expect(document.querySelector("body")).toHaveClass("is-paper");
await userEvent.click(screen.getByRole("button", { name: "Remove login" }));
expect(document.querySelector("body")).toHaveClass("is-paper");
});
19 changes: 13 additions & 6 deletions src/components/LoginPageLayout/LoginPageLayout.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { FC, ReactNode, useEffect, useLayoutEffect } from "react";
import React, { FC, ReactNode, useLayoutEffect } from "react";
import Card from "components/Card";
import Col from "components/Col";
import Navigation from "components/Navigation";
Expand Down Expand Up @@ -27,12 +27,19 @@ const LoginPageLayout: FC<Props> = ({
title,
logo = defaultLogo,
}) => {
useEffect(() => {
document.title = title;
}, [title]);
useLayoutEffect(() => {
document.querySelector("body")?.classList.add("is-paper");
});
const bodyInitiallyContainsIsPaper = document
.querySelector("body")
?.classList.contains("is-paper");
if (!bodyInitiallyContainsIsPaper) {
document.querySelector("body")?.classList.add("is-paper");
}
return () => {
if (!bodyInitiallyContainsIsPaper) {
document.querySelector("body")?.classList.remove("is-paper");
}
};
}, []);

return (
<Row className="p-strip page-row">
Expand Down

0 comments on commit 10e4fe7

Please sign in to comment.