From 31102c2f8c57d9073a10b65c628df7e88dd20416 Mon Sep 17 00:00:00 2001
From: Sean Jones
Date: Tue, 13 Apr 2021 15:34:11 +0100
Subject: [PATCH] ui component for displaying list of users
---
src/components/App/App.tsx | 4 ++-
.../ContentCard/ContentCard.test.tsx | 17 ++++++++++++
src/components/ContentCard/ContentCard.tsx | 11 ++++++++
.../PageContainer/PageContainer.test.tsx | 17 ++++++++++++
.../PageContainer/PageContainer.tsx | 11 ++++++++
src/components/SiteHeader/SiteHeader.tsx | 2 +-
src/components/UsersTable/UsersTable.tsx | 26 +++++++++++++++++++
src/pages/LandingPage/LandingPage.test.tsx | 13 ++++++++++
src/pages/LandingPage/LandingPage.tsx | 19 ++++++++++++++
tsconfig.json | 1 +
webpack.config.js | 1 +
11 files changed, 120 insertions(+), 2 deletions(-)
create mode 100644 src/components/ContentCard/ContentCard.test.tsx
create mode 100644 src/components/ContentCard/ContentCard.tsx
create mode 100644 src/components/PageContainer/PageContainer.test.tsx
create mode 100644 src/components/PageContainer/PageContainer.tsx
create mode 100644 src/components/UsersTable/UsersTable.tsx
create mode 100644 src/pages/LandingPage/LandingPage.test.tsx
create mode 100644 src/pages/LandingPage/LandingPage.tsx
diff --git a/src/components/App/App.tsx b/src/components/App/App.tsx
index 1cfd8dd..b1e8b42 100644
--- a/src/components/App/App.tsx
+++ b/src/components/App/App.tsx
@@ -6,6 +6,7 @@ import { getUsername } from "state/userProfile/selectors";
import Loader from "../Loader/Loader";
import SiteHeader from "../SiteHeader/SiteHeader";
+import LandingPage from "pages/LandingPage/LandingPage";
import "styles/app.scss";
@@ -15,7 +16,7 @@ const App: FC = () => {
useEffect(() => {
if (!username) {
- dispatch(fetchUserById());
+ setTimeout(() => dispatch(fetchUserById()), 2400);
}
}, [dispatch]);
@@ -28,6 +29,7 @@ const App: FC = () => {
return (
+
);
};
diff --git a/src/components/ContentCard/ContentCard.test.tsx b/src/components/ContentCard/ContentCard.test.tsx
new file mode 100644
index 0000000..ba8a560
--- /dev/null
+++ b/src/components/ContentCard/ContentCard.test.tsx
@@ -0,0 +1,17 @@
+import React from "react";
+import { screen, render } from "@testing-library/react";
+
+import ContentCard from "./ContentCard";
+
+describe("ContentCard", () => {
+ it("renders", () => {
+ render(
+
+ Child element
+
+ );
+
+ const childElement = screen.getByText("Child element");
+ expect(childElement).toBeInTheDocument();
+ });
+});
diff --git a/src/components/ContentCard/ContentCard.tsx b/src/components/ContentCard/ContentCard.tsx
new file mode 100644
index 0000000..a175570
--- /dev/null
+++ b/src/components/ContentCard/ContentCard.tsx
@@ -0,0 +1,11 @@
+import React, { FC } from "react";
+
+interface ContentCardProps {
+ children: JSX.Element[] | JSX.Element;
+}
+
+const ContentCard: FC = ({ children }) => (
+ {children}
+);
+
+export default ContentCard;
diff --git a/src/components/PageContainer/PageContainer.test.tsx b/src/components/PageContainer/PageContainer.test.tsx
new file mode 100644
index 0000000..8334241
--- /dev/null
+++ b/src/components/PageContainer/PageContainer.test.tsx
@@ -0,0 +1,17 @@
+import React from "react";
+import { screen, render } from "@testing-library/react";
+
+import PageContainer from "./PageContainer";
+
+describe("PageContainer", () => {
+ it("renders", () => {
+ render(
+
+ Child element
+
+ );
+
+ const childElement = screen.getByText("Child element");
+ expect(childElement).toBeInTheDocument();
+ });
+});
diff --git a/src/components/PageContainer/PageContainer.tsx b/src/components/PageContainer/PageContainer.tsx
new file mode 100644
index 0000000..f693cd5
--- /dev/null
+++ b/src/components/PageContainer/PageContainer.tsx
@@ -0,0 +1,11 @@
+import React, { FC } from "react";
+
+interface PageContainerProps {
+ children: JSX.Element[] | JSX.Element;
+}
+
+const PageContainer: FC = ({ children }) => (
+ {children}
+);
+
+export default PageContainer;
diff --git a/src/components/SiteHeader/SiteHeader.tsx b/src/components/SiteHeader/SiteHeader.tsx
index afc29c2..392c335 100644
--- a/src/components/SiteHeader/SiteHeader.tsx
+++ b/src/components/SiteHeader/SiteHeader.tsx
@@ -4,7 +4,7 @@ import Logo from "assets/images/logo.svg";
import UserAvatar from "../UserAvatar/UserAvatar";
const SiteHeader: FC = () => (
-
+
diff --git a/src/components/UsersTable/UsersTable.tsx b/src/components/UsersTable/UsersTable.tsx
new file mode 100644
index 0000000..7df4c36
--- /dev/null
+++ b/src/components/UsersTable/UsersTable.tsx
@@ -0,0 +1,26 @@
+import React, { FC } from "react";
+
+const UsersTable: FC = () => {
+ return (
+
+
+
+ | asdfasd |
+ asdf |
+ asdf |
+ asdf |
+
+
+
+
+ | a |
+ a |
+ a |
+ a |
+
+
+
+ );
+};
+
+export default UsersTable;
diff --git a/src/pages/LandingPage/LandingPage.test.tsx b/src/pages/LandingPage/LandingPage.test.tsx
new file mode 100644
index 0000000..ee05220
--- /dev/null
+++ b/src/pages/LandingPage/LandingPage.test.tsx
@@ -0,0 +1,13 @@
+import React from "react";
+import { screen, render } from "@testing-library/react";
+
+import LandingPage from "./LandingPage";
+
+describe("LandingPage", () => {
+ it("renders", () => {
+ render(
);
+
+ const heading = screen.getByText("Landing page");
+ expect(heading).toBeInTheDocument();
+ });
+});
diff --git a/src/pages/LandingPage/LandingPage.tsx b/src/pages/LandingPage/LandingPage.tsx
new file mode 100644
index 0000000..05adcae
--- /dev/null
+++ b/src/pages/LandingPage/LandingPage.tsx
@@ -0,0 +1,19 @@
+import React, { FC } from "react";
+
+import PageContainer from "components/PageContainer/PageContainer";
+import ContentCard from "components/ContentCard/ContentCard";
+import UsersTable from "components/UsersTable/UsersTable";
+
+const LandingPage: FC = () => {
+ return (
+
+ Landing page
+ Lorem ipsum dolor sit amet consectetur adipisicing elit.
+
+
+
+
+ );
+};
+
+export default LandingPage;
diff --git a/tsconfig.json b/tsconfig.json
index 87c7b53..380d190 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -11,6 +11,7 @@
"api/*": ["./src/api/*"],
"assets/*": ["./src/assets/*"],
"components/*": ["./src/components/*"],
+ "pages/*": ["./src/pages/*"],
"state/*": ["./src/state/*"],
"styles/*": ["./src/styles/*"],
"utilities/*": ["./src/utilities/*"]
diff --git a/webpack.config.js b/webpack.config.js
index dfe584e..55d4bf3 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -35,6 +35,7 @@ module.exports = () => ({
api: path.resolve(sourcePath, "api/"),
assets: path.resolve(sourcePath, "assets/"),
components: path.resolve(sourcePath, "components/"),
+ pages: path.resolve(sourcePath, "pages/"),
state: path.resolve(sourcePath, "state/"),
styles: path.resolve(sourcePath, "styles/"),
utilities: path.resolve(sourcePath, "utilities/"),