From 3f039ad6528401bbaa2f1dee5559c2f4d1b97a5d Mon Sep 17 00:00:00 2001 From: Alec M Date: Tue, 28 Jan 2025 11:38:10 -0500 Subject: [PATCH 1/3] CRDCDH-2269 Refactor Footer components --- src/components/Footer/FooterDesktop.test.tsx | 20 ++ src/components/Footer/FooterDesktop.tsx | 262 +++++++----------- src/components/Footer/FooterMobile.test.tsx | 37 +++ src/components/Footer/FooterMobile.tsx | 170 ++++-------- src/components/Footer/FooterTablet.test.tsx | 20 ++ src/components/Footer/FooterTablet.tsx | 259 +++++++---------- src/components/Footer/NewsletterForm.test.tsx | 141 ++++++++++ src/components/Footer/NewsletterForm.tsx | 95 +++++++ src/components/Footer/index.test.tsx | 56 +++- src/components/Footer/index.tsx | 10 +- 10 files changed, 628 insertions(+), 442 deletions(-) create mode 100644 src/components/Footer/FooterDesktop.test.tsx create mode 100644 src/components/Footer/FooterMobile.test.tsx create mode 100644 src/components/Footer/FooterTablet.test.tsx create mode 100644 src/components/Footer/NewsletterForm.test.tsx create mode 100644 src/components/Footer/NewsletterForm.tsx diff --git a/src/components/Footer/FooterDesktop.test.tsx b/src/components/Footer/FooterDesktop.test.tsx new file mode 100644 index 000000000..89d0b821d --- /dev/null +++ b/src/components/Footer/FooterDesktop.test.tsx @@ -0,0 +1,20 @@ +import { render } from "@testing-library/react"; +import { BrowserRouter } from "react-router-dom"; +import { axe } from "jest-axe"; +import FooterDesktop from "./FooterDesktop"; + +describe("Accessibility", () => { + it("should not have any accessibility violations", async () => { + const { container } = render(, { wrapper: (p) => }); + + expect(await axe(container)).toHaveNoViolations(); + }); +}); + +describe("Basic Functionality", () => { + it("should render without crashing", () => { + expect(() => + render(, { wrapper: (p) => }) + ).not.toThrow(); + }); +}); diff --git a/src/components/Footer/FooterDesktop.tsx b/src/components/Footer/FooterDesktop.tsx index e78ccc444..784a0258c 100644 --- a/src/components/Footer/FooterDesktop.tsx +++ b/src/components/Footer/FooterDesktop.tsx @@ -1,9 +1,9 @@ -import React, { useState, useRef } from "react"; import { styled } from "@mui/material"; import { Link } from "react-router-dom"; import FooterData from "../../config/FooterConfig"; +import NewsletterForm from "./NewsletterForm"; -const FooterStyled = styled("div")({ +const StyledFooter = styled("footer")({ backgroundColor: "#1B496E", borderTop: "1px solid #6C727B", bottom: 0, @@ -12,7 +12,7 @@ const FooterStyled = styled("div")({ position: "relative", }); -const FooterContainer = styled("div")({ +const StyledTopContainer = styled("div")({ padding: "2rem", maxWidth: "1400px", marginLeft: "auto", @@ -21,7 +21,7 @@ const FooterContainer = styled("div")({ justifyContent: "space-between", }); -const FooterEmailSignupContainer = styled("form")({ +const StyledNewsletterForm = styled(NewsletterForm)({ width: "33.3%", "& .signUpTitle": { fontFamily: "poppins", @@ -99,7 +99,7 @@ const FooterLinksContainer = styled("div")({ }, }); -const BottomFooter = styled("div")({ +const StyledBottomContainer = styled("div")({ background: "#14315C", "& span": { display: "block", @@ -196,169 +196,107 @@ const BottomFooter = styled("div")({ }, }); -const FooterDesktop = () => { - const [emailContent, setEmailContent] = useState(""); - const emailForm = useRef(null); - const emailInput = useRef(null); - function validateEmail(email) { - const reg = /^[A-Za-z0-9]+([_.-][A-Za-z0-9]+)*@([A-Za-z0-9-]+\.)+[A-Za-z]{2,6}$/; - return reg.test(email); - } - - const handleSubmit = (e) => { - emailForm.current.reportValidity(); - if (!validateEmail(emailContent)) { - emailInput.current.setCustomValidity("Please enter valid email"); - e.preventDefault(); - } else { - emailInput.current.setCustomValidity(""); - emailForm.current.submit(); - } - }; - - const handleChange = (e) => { - setEmailContent(e.target.value); - }; - - return ( - <> - - - - {FooterData.link_sections.map((linkItem) => ( -
-
{linkItem.title}
- {linkItem.items.map((item) => { - if (typeof item?.link !== "string") { - return ( -
- {item.text} -
- ); - } - - return ( -
- {item.link.includes("http") ? ( - - {item.text} - - ) : ( - - {item.text} - - )} -
- ); - })} -
- ))} -
- - -
Sign up for email updates
-
- -
- -
-
-
- -
- - -
-