Skip to content

Commit

Permalink
feat(apps/web): Add loading and error states to pages
Browse files Browse the repository at this point in the history
  • Loading branch information
nevendyulgerov committed Dec 8, 2023
1 parent 52d8b95 commit 3c5bc74
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 4 deletions.
2 changes: 1 addition & 1 deletion apps/web/src/app/applications/[address]/error.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use client";

import type { FC } from "react";
import PageError from "../../components/pageError";
import PageError from "../../../components/pageError";

interface PageErrorProps {
reset: () => void;
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/app/applications/[address]/loading.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import PageLoader from "../../components/pageLoader";
import PageLoader from "../../../components/pageLoader";

export default function Loading() {
return <PageLoader />;
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/app/applications/error.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use client";

import type { FC } from "react";
import PageError from "../components/pageError";
import PageError from "../../components/pageError";

interface PageErrorProps {
reset: () => void;
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/app/applications/loading.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import PageLoader from "../components/pageLoader";
import PageLoader from "../../components/pageLoader";

export default function Loading() {
return <PageLoader />;
Expand Down
12 changes: 12 additions & 0 deletions apps/web/src/app/error.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"use client";

import type { FC } from "react";
import PageError from "../components/pageError";

interface PageErrorProps {
reset: () => void;
}

const Error: FC<PageErrorProps> = ({ reset }) => <PageError reset={reset} />;

export default Error;
5 changes: 5 additions & 0 deletions apps/web/src/app/loading.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import PageLoader from "../components/pageLoader";

export default function Loading() {
return <PageLoader />;
}
16 changes: 16 additions & 0 deletions apps/web/src/components/pageLoader.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import type { FC } from "react";
import { Flex, Loader } from "@mantine/core";

const PageLoader: FC = () => (
<Flex
w="100%"
h="100%"
justify="center"
align="center"
style={{ minHeight: "inherit" }}
>
<Loader data-testid="page-spinner" />
</Flex>
);

export default PageLoader;
32 changes: 32 additions & 0 deletions apps/web/test/components/pageError.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { describe, it } from "vitest";
import { render, screen, fireEvent } from "@testing-library/react";
import { withMantineTheme } from "../utils/WithMantineTheme";
import PageError from "../../src/components/pageError";

const Component = withMantineTheme(PageError);
const props = {
reset: () => undefined,
};

describe("PageError component", () => {
it("should display correct heading", () => {
render(<Component {...props} />);
expect(screen.getByText("Something went wrong!")).toBeInTheDocument();
});

it("should display correct button text", () => {
render(<Component {...props} />);
expect(screen.getByText("Try again")).toBeInTheDocument();
});

it("should invoke reset function when button is clicked", () => {
const mockedReset = vi.fn();
render(<Component reset={mockedReset} />);

const button = screen.getByText("Try again")
.parentElement as HTMLButtonElement;
fireEvent.click(button);

expect(mockedReset).toHaveBeenCalled();
});
});
13 changes: 13 additions & 0 deletions apps/web/test/components/pageLoader.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { describe, it } from "vitest";
import { render, screen } from "@testing-library/react";
import { withMantineTheme } from "../utils/WithMantineTheme";
import PageLoader from "../../src/components/pageLoader";

const Component = withMantineTheme(PageLoader);

describe("PageLoader component", () => {
it("should display spinner", () => {
render(<Component />);
expect(screen.getByTestId("page-spinner")).toBeInTheDocument();
});
});

0 comments on commit 3c5bc74

Please sign in to comment.