Skip to content

Commit

Permalink
Merge pull request #167 from farhan-nurzi-deriv/farhan/tablet-portrait
Browse files Browse the repository at this point in the history
Farhan/add isTabletPortrait to useDevice
  • Loading branch information
shayan-deriv authored Apr 22, 2024
2 parents 49b0758 + 617f163 commit 96d11eb
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 29 deletions.
63 changes: 34 additions & 29 deletions src/components/PageLayout/__test__/PageLayout.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,42 +1,47 @@
import React from "react";
import { render, screen } from "@testing-library/react";
import { PageLayout } from "..";
import * as hooks from "../../../hooks"
import * as hooks from "../../../hooks";

// Mocking the useDevice hook
jest.mock("../../../hooks", () => ({
useDevice: jest.fn().mockReturnValue({isMobile:false}),
useDevice: jest.fn().mockReturnValue({ isMobile: false }),
}));

describe("PageLayout Component", () => {
it("renders children correctly", () => {
render(
<PageLayout>
<div>Content</div>
</PageLayout>
);
const content =screen.getByText("Content")
expect(content).toBeInTheDocument();
});
it("renders children correctly", () => {
render(
<PageLayout>
<div>Content</div>
</PageLayout>,
);
const content = screen.getByText("Content");
expect(content).toBeInTheDocument();
});

it("renders sidebar when provided and not on mobile", () => {
const sidebar = <div>Sidebar</div>;
render(<PageLayout sidebar={sidebar} />);
const sidebarContent =screen.getByText("Sidebar")
expect(sidebarContent).toBeInTheDocument();
});
it("renders sidebar when provided and not on mobile", () => {
const sidebar = <div>Sidebar</div>;
render(<PageLayout sidebar={sidebar} />);
const sidebarContent = screen.getByText("Sidebar");
expect(sidebarContent).toBeInTheDocument();
});

it("does not render sidebar on mobile", () => {
jest.spyOn(hooks,'useDevice').mockImplementation(()=>({isMobile:true, isDesktop:false, isTablet:false}))
const sidebar = <div>Sidebar</div>;
render(<PageLayout sidebar={sidebar} />);
const sidebarContent =screen.queryByText("Sidebar")
expect(sidebarContent).not.toBeInTheDocument()
});
it("does not render sidebar on mobile", () => {
jest.spyOn(hooks, "useDevice").mockImplementation(() => ({
isMobile: true,
isDesktop: false,
isTablet: false,
isTabletPortrait: false,
}));
const sidebar = <div>Sidebar</div>;
render(<PageLayout sidebar={sidebar} />);
const sidebarContent = screen.queryByText("Sidebar");
expect(sidebarContent).not.toBeInTheDocument();
});

it("does not render sidebar when not provided", () => {
render(<PageLayout />);
const sidebarContent=screen.queryByTestId("sidebar")
expect(sidebarContent).toBeNull();
});
it("does not render sidebar when not provided", () => {
render(<PageLayout />);
const sidebarContent = screen.queryByTestId("sidebar");
expect(sidebarContent).toBeNull();
});
});
5 changes: 5 additions & 0 deletions src/hooks/useDevice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,17 @@ export const useDevice = () => {
const isTablet = useMediaQuery(
`(min-width: 601px) and (max-width: 1279px)`,
);
const isTabletPortrait = useMediaQuery(
`(min-width: 601px) and (max-width: 1279px) and (orientation: portrait)`,
);
return {
/** returns Larger screen tablets [min-width: 1280px] */
isDesktop,
/** returns Smaller screen tablets [max-width: 600px] */
isMobile,
/** returns Larger screen phones and smaller screen desktop [min-width: 601px and max-width: 1279px] */
isTablet,
/** returns tablet screen with portrait orientation [min-width: 601px and max-width: 1279px and orientation: portrait] */
isTabletPortrait,
};
};

0 comments on commit 96d11eb

Please sign in to comment.