Skip to content

Commit

Permalink
Updates
Browse files Browse the repository at this point in the history
  • Loading branch information
Kaleb-Rupe committed Aug 18, 2024
1 parent b848ab8 commit 960dbf9
Show file tree
Hide file tree
Showing 10 changed files with 309 additions and 156 deletions.
21 changes: 21 additions & 0 deletions src/components/Footer/contact-form-page.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import React, { useState, useCallback } from "react";
import { useForm } from "react-hook-form";
import emailjs from "@emailjs/browser";
import { services } from "../Services-Gallery/services-list";
import "../../css/contact.css";

const Form = () => {
Expand All @@ -14,6 +15,7 @@ const Form = () => {
"footer-name": "",
"footer-email": "",
"footer-phone": "",
"footer-service": "",
"footer-message": "",
},
});
Expand Down Expand Up @@ -137,9 +139,28 @@ const Form = () => {
)}
</div>

<div className="form-group">
<label htmlFor="service">Service:</label>
<select
id="service"
{...register("service", {
required: "Please select a service",
})}
>
<option value="">Select a service</option>
{services.map((service) => (
<option key={service.id} value={service.title}>
{service.title}
</option>
))}
</select>
{errors.service && <p>{errors.service.message}</p>}
</div>

<div className="form-group">
<label htmlFor="footer-message">Message:</label>
<textarea
className="message-input"
id="footer-message"
{...register("footer-message", {
required: "Message is required.",
Expand Down
2 changes: 1 addition & 1 deletion src/components/Footer/details-page.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const useMediaQuery = (query) => {
};

const Details = () => {
const isMobile = useMediaQuery("(max-width: 844px)");
const isMobile = useMediaQuery("(max-width: 1080px)");
const email = "qhtm58@yahoo.com";
const subject = encodeURIComponent("Inquiry here!");
const body = encodeURIComponent(
Expand Down
84 changes: 57 additions & 27 deletions src/components/Home/hero-section.js
Original file line number Diff line number Diff line change
@@ -1,39 +1,69 @@
import React from "react";
import { Link } from "react-router-dom";
import React, { lazy } from "react";
import { useMediaQuery } from "../../hooks/useMediaQuery";
import "../../css/hero-section.css";
import heroImg from "../../assets/logos/quality-hi-tech-large.png";
import { FaPhone } from "react-icons/fa";

const ContactForm = lazy(() => import("../Footer/contact-form-page"));

const Hero = () => {
const isMobile = useMediaQuery("(max-width: 768px)");

return (
<section className="hero" aria-labelledby="hero-title">
<div className="wrapper">
<div className="contrast-element">
<h1 id="hero-title" className="visually-hidden">
Quality Hi Tech Carpet Cleaning
</h1>
<img
src={heroImg}
alt="Quality Hi Tech Logo"
loading="eager"
width="300"
height="100"
/>
<p>
Clean your Carpet, Upholstery, and Tile & Grout with our
professional cleaning services.
</p>
<Link
to="/contact"
className="cta-button"
onClick={() => window.scrollTo(0, 0)}
aria-label="Get a free estimate"
>
Free Estimate
</Link>
<div className="hero-content">
<div className="hero-left">
<div className="contrast-element">
<h1 id="hero-title" className="visually-hidden">
Quality Hi Tech Carpet Cleaning
</h1>
<img
src={heroImg}
alt="Quality Hi Tech Logo"
loading="eager"
width="300"
height="100"
/>
</div>
<div className="contrast-element hero-contact-info">
<h3>Licensed & Insured Serving the Pasco & Hillsborough County</h3>
<div className="hero-contact-links">
{isMobile ? (
<a
href="tel:8132256515"
rel="noopener noreferrer"
aria-label="Contact Us"
>
<FaPhone className="icon" />
<span>(813) 225-6515</span>
</a>
) : (
<></>
)}
<div>
<h3>Hours of Operation:</h3>
</div>
<div className="hero-contact-column">
<p>
Monday-Friday:
<br />
9:00 AM - 6:00 PM
</p>
<p>
Saturday & Sunday:
<br />
By Appointment Only
</p>
</div>
</div>
</div>
</div>
<div className="hero-right">
<ContactForm />
</div>
</div>
</section>
);
};

export default React.memo(Hero);
export default React.memo(Hero);
55 changes: 39 additions & 16 deletions src/components/Services-Gallery/services-list.js
Original file line number Diff line number Diff line change
@@ -1,42 +1,65 @@
export const services = [
{
id: 1,
title: "Carpet Patch",
description: "Expert repairs for damaged carpets, seamlessly blending with your existing flooring.",
title: "Carpet Cleaning and Maintenance",
icon: "fa-broom",
description:
"Our expert technicians use state-of-the-art equipment and eco-friendly cleaning solutions to leave your carpets looking like new.",
},
{
id: 2,
title: "Pet Odor Removal",
description: "Eliminate stubborn pet odors, leaving your carpets fresh and your home smelling clean.",
title: "Upholstery Cleaning",
icon: "fa-couch",
description:
"We use specialized cleaning methods and products to gently remove dirt and stains from your upholstered furniture.",
},
{
id: 3,
title: "Carpet Stretching",
description: "Restore your carpet's appearance and eliminate tripping hazards with our professional stretching service.",
title: "Tile and Grout Cleaning",
icon: "fa-tile",
description:
"Our advanced cleaning technology and specialized cleaning solutions make quick work of dirt and grime on your tile and grout.",
},
{
id: 4,
title: "Spot Drying",
description: "Quick and effective drying for spills and wet spots, preventing mold and mildew growth.",
title: "Pet Odor Removal",
icon: "fa-paw",
description:
"We use a combination of specialized cleaning products and odor-neutralizing treatments to eliminate pet odors from your carpets and upholstery.",
},
{
id: 5,
title: "Red Stain Removal",
description: "Specialized treatment for tough red stains from wine, juice, or other colorful spills.",
title: "Water Damage Restoration",
icon: "fa-water",
description:
"Our team is trained to quickly respond to water damage emergencies, extracting water and drying your property to prevent further damage.",
},
{
id: 6,
title: "Furniture Cleaning",
description: "Revitalize your upholstery with our deep cleaning service, extending the life of your furniture.",
title: "Commercial Carpet Cleaning",
icon: "fa-building",
description:
"We offer customized commercial carpet cleaning solutions to meet the unique needs of your business, ensuring a clean and healthy environment for your employees and customers.",
},
{
id: 7,
title: "Tile & Grout Cleaning",
description: "Restore the shine to your tiles and refresh your grout lines for a cleaner, brighter look.",
title: "Power Stretching Carpets",
icon: "fa-arrows-alt-h",
description:
"We use specialized equipment to stretch and re-tension your carpets, removing wrinkles and creases for a like-new appearance.",
},
{
id: 8,
title: "Water Damage Cleanup",
description: "Comprehensive water damage cleanup to protect your home and belongings.",
title: "Repair & Patching Carpets",
icon: "fa-seedling",
description:
"Our skilled technicians can repair and patch damaged areas of your carpet, extending its lifespan and saving you money.",
},
{
id: 9,
title: "Stripping and Waxing Terrazzo Floors",
icon: "fa-hammer",
description:
"Our experienced technicians use specialized equipment and techniques to strip and wax your terrazzo floors, restoring their original shine and luster.",
},
];
63 changes: 45 additions & 18 deletions src/css/contact.css
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,32 @@
display: flex;
justify-content: center;
align-items: center;
padding: 0 3.125rem;
background: url('../assets/images/quality-hi-tech-home.png') center/cover no-repeat;
position: relative;
overflow: hidden;
box-sizing: border-box;
z-index: 1;
}

.wrapper-contact::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image: url('../assets/images/quality-hi-tech-home.png');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
opacity: 0.5;
z-index: -1;
}

.contact-container {
width: 100%;
max-width: 500px;
padding: 2rem;
margin: 1.5rem 2rem;
color: var(--form-text-color);
border: 1px solid var(--form-border-color);
border-radius: 8px;
Expand All @@ -31,8 +46,11 @@
}

.form-wrapper {
display: flex;
flex-direction: column;
width: 100%;
max-width: 400px;
height: -webkit-fill-available;
max-width: 500px;
margin: 0 auto;
padding: 2rem;
color: var(--form-text-color);
Expand Down Expand Up @@ -94,6 +112,10 @@
box-shadow: 0 0 5px rgba(79, 187, 235, 0.5);
}

.message-input {
height: 100%;
}

.form-group p,
.error-message {
color: var(--form-error-color);
Expand Down Expand Up @@ -153,21 +175,6 @@ button[type="submit"]:active,

@media (max-width: 600px) {

.contact-container,
.form-wrapper,
.success-message,
.success-message-contact {
width: 90%;
padding: 1.5rem;
margin: 2rem auto;
}
}

@media (max-width: 600px) {
.wrapper-contact {
padding: 0;
}

.form-group {
flex: 1 1 100%;
}
Expand All @@ -177,4 +184,24 @@ button[type="submit"]:active,
.submit-button {
font-size: 14px;
}
}

.form-group select {
width: 100%;
padding: 0.75rem;
font-size: 1rem;
border: 1px solid var(--form-border-color);
border-radius: 4px;
transition: border-color 0.3s ease;
appearance: none;
background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E');
background-repeat: no-repeat;
background-position: right 0.7rem top 50%;
background-size: 0.65rem auto;
}

.form-group select:focus {
outline: none;
border-color: var(--form-secondary-color);
box-shadow: 0 0 5px rgba(79, 187, 235, 0.5);
}
Loading

0 comments on commit 960dbf9

Please sign in to comment.