Compare commits

..

4 Commits

Author SHA1 Message Date
victorAnumudu 15bd1a9dd7 fixed contact page form validation 2025-07-12 08:56:25 +01:00
ameye 210e73d09b Merge branch 'cookies-fixing' of WrenchBoard/WrenchBoardMainSite2025 into master 2025-06-30 17:06:52 +00:00
victorAnumudu 64390441a1 cookies fixed 2025-06-29 12:43:42 +01:00
ameye c8095755b5 Merge branch 'footer-update' of WrenchBoard/WrenchBoardMainSite2025 into master 2025-06-28 13:28:17 +00:00
3 changed files with 59 additions and 32 deletions
+30 -22
View File
@@ -1,36 +1,44 @@
"use client"
import React, { useEffect, useState } from 'react'
//import Cookies from 'js-cookie'
"use client";
import React, { useLayoutEffect, useState } from 'react';
export default function AcceptCookies() {
const [cookies, setCookies] = useState(true)
const acceptCookies = () => {
// Cookies.set('useCookies', 'true')
setCookies(true)
}
// Safe cookie getter
function getCookie(name) {
if (typeof document === 'undefined') return null; // SSR safety
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
return null;
}
useEffect(()=>{
const useCookies = false; // Cookies.get('useCookies')
if(useCookies == 'true'){
setCookies(true)
const [cookies, setCookies] = useState(true); // Start as true
const acceptCookies = () => {
document.cookie = `use_cookies=${encodeURIComponent('true')}; path=/; max-age=31536000`; // 1 year
setCookies(true);
};
useLayoutEffect(()=>{
const useCookies = getCookie('use_cookies');
if (useCookies && decodeURIComponent(useCookies) === 'true') {
setCookies(true);
}else{
setCookies(false)
}
},[])
},[])
return (
<>
{/* {cookies ?
<></>
: */}
{cookies ? <></> : (
<div className={`${cookies ? 'slide-down' : 'slide-up'} cookies-wrapper position-fixed d-lg-flex justify-content-center align-items-center gap-5 p-2`}>
<p className='m-0'>
<p className="m-0">
This website uses cookies to provide you the best experience possible, as well as for tracking performance and marketing purposes. You can check our privacy policy for more information. By clicking &#x275B;&#x275B;Confirm&#x275C;&#x275C; or by continuing to use our website, you consent to our use of cookies.
</p>
<button onClick={acceptCookies} className='px-5 py-2'>Accept</button>
</p>
<button onClick={acceptCookies} className="px-5 py-2">
Accept
</button>
</div>
{/* } */}
)}
</>
)
);
}
+29 -9
View File
@@ -17,19 +17,38 @@ function Forms() {
terms_conditions: false
})
const validForm = formDetails.first_name && formDetails.last_name && formDetails.email && formDetails.phone_number && formDetails.subject && formDetails.message
const handleChange = ({target:{name, value}}) => {
setFormDetails(prev => ({...prev, [name]:value}))
if(name == 'terms_conditions'){
setFormDetails(prev => ({...prev, [name]:!prev.terms_conditions}))
}else{
setFormDetails(prev => ({...prev, [name]:value}))
}
}
const [requestStatus, setRequestStatus] = useState({loading:false, status:false, msg:''})
const validForm = formDetails.first_name && formDetails.last_name && formDetails.email && formDetails.phone_number && formDetails.subject && formDetails.message
function handleSubmit(e) {
e.preventDefault()
const isChecked = formDetails.terms_conditions
setRequestStatus({loading:true, status:false, msg:''})
if(!validForm){
setRequestStatus({loading:false, status:false, msg:'please, fill all fields'})
setRequestStatus({loading:false, status:false, msg:'Please, fill all fields'})
setTimeout(()=>{
setRequestStatus({loading:false, status:false, msg:''})
},3000)
return
}
if(!(/^\d{7,15}$/.test(formDetails.phone_number))){
setRequestStatus({loading:false, status:false, msg:'Please, enter a valid phone number'})
setTimeout(()=>{
setRequestStatus({loading:false, status:false, msg:''})
},3000)
return
}
if(!isChecked){
setRequestStatus({loading:false, status:false, msg:'Please, Accept Terms & Conditions'})
setTimeout(()=>{
setRequestStatus({loading:false, status:false, msg:''})
},3000)
@@ -135,14 +154,14 @@ function Forms() {
type="email"
name="email"
placeholder="Email Address"
maxLength={35}
maxLength={55}
onChange={handleChange}
value={formDetails.email}
/>
</div>
<div className="col-md-6">
<input
type="number"
type="text"
name="phone_number"
placeholder="Phone Number"
maxLength={15}
@@ -151,7 +170,7 @@ function Forms() {
/>
</div>
<div className="col-md-12">
<input type="text" name="subject" placeholder="Subject" maxLength={35} value={formDetails.subject} onChange={handleChange} />
<input type="text" name="subject" placeholder="Subject" maxLength={150} value={formDetails.subject} onChange={handleChange} />
</div>
<div className="col-md-12">
<textarea
@@ -159,6 +178,7 @@ function Forms() {
placeholder="How can we help?"
onChange={handleChange}
value={formDetails.message}
maxLength={350}
></textarea>
</div>
<div className="col-md-6">
-1
View File
@@ -11,7 +11,6 @@
"dependencies": {
"axios": "^1.7.2",
"caniuse-lite": "^1.0.30001651",
"js-cookie": "^3.0.5",
"next": "14.2.5",
"react": "^18",
"react-dom": "^18",