194 lines
6.2 KiB
JavaScript
194 lines
6.2 KiB
JavaScript
import React, { useState } from "react";
|
|
import { motion } from "framer-motion";
|
|
import LazyImage from "../common/LazyImage";
|
|
import ProfileIcon from "../../assets/images/profileicon.png";
|
|
import HoroscodeIcon from "../../assets/images/horoscopericon.png";
|
|
import FamilyIcon from "../../assets/images/homeicon.png";
|
|
import Box from "@mui/material/Box";
|
|
import { useNavigate } from "react-router-dom";
|
|
import AstroChatUI from "./AstroChatUI";
|
|
import MembershipCard from "./MembershipCard";
|
|
|
|
const ProfileCompletion = () => {
|
|
const [completeness, setCompleteness] = useState(30);
|
|
const navigate = useNavigate();
|
|
|
|
const cards = [
|
|
{
|
|
id: 1,
|
|
icon: ProfileIcon,
|
|
title: "Add Photo(s)",
|
|
bgColor: "bg-green-50",
|
|
iconColor: "text-green-600",
|
|
borderColor: "border-green-200",
|
|
url:"/profile-edit"
|
|
},
|
|
{
|
|
id: 2,
|
|
icon: HoroscodeIcon,
|
|
title: "Add Horoscope",
|
|
bgColor: "bg-purple-50",
|
|
iconColor: "text-purple-600",
|
|
borderColor: "border-purple-200",
|
|
url:"/horoscoper-generate"
|
|
},
|
|
{
|
|
id: 3,
|
|
icon: FamilyIcon,
|
|
title: "Family Details",
|
|
bgColor: "bg-red-50",
|
|
iconColor: "text-red-600",
|
|
borderColor: "border-red-200",
|
|
url:"/profile-edit"
|
|
},
|
|
];
|
|
|
|
const container = {
|
|
hidden: { opacity: 0 },
|
|
show: {
|
|
opacity: 1,
|
|
transition: {
|
|
staggerChildren: 0.1,
|
|
},
|
|
},
|
|
};
|
|
|
|
const item = {
|
|
hidden: { opacity: 0, y: 20 },
|
|
show: { opacity: 1, y: 0 },
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<div className="max-w-[1400px] w-[100%] mx-auto my-10 px-2 sm:p-2 lg:p-2">
|
|
<motion.div
|
|
initial={{ opacity: 0, y: -20 }}
|
|
animate={{ opacity: 1, y: 0 }}
|
|
transition={{ duration: 0.6 }}
|
|
className="max-w-6xl mx-auto"
|
|
>
|
|
{/* Header Section */}
|
|
<div className="bg-green-50 rounded-2xl border border-1 border-gray-200 p-6 sm:p-8 mb-6">
|
|
<motion.h1
|
|
initial={{ opacity: 0, x: -20 }}
|
|
animate={{ opacity: 1, x: 0 }}
|
|
transition={{ delay: 0.2, duration: 0.5 }}
|
|
className="text-2xl sm:text-3xl lg:text-4xl font-bold text-gray-900 mb-4"
|
|
>
|
|
Complete Your Profile
|
|
</motion.h1>
|
|
|
|
{/* Progress Bar Section */}
|
|
<motion.div
|
|
initial={{ opacity: 0 }}
|
|
animate={{ opacity: 1 }}
|
|
transition={{ delay: 0.4, duration: 0.5 }}
|
|
className="space-y-3"
|
|
>
|
|
<div className="flex items-center justify-between">
|
|
<span className="text-sm sm:text-base text-gray-600 font-medium">
|
|
Profile completeness score
|
|
</span>
|
|
<motion.span
|
|
initial={{ scale: 0 }}
|
|
animate={{ scale: 1 }}
|
|
transition={{ delay: 0.6, type: "spring", stiffness: 200 }}
|
|
className="text-lg sm:text-xl font-bold text-gray-900"
|
|
>
|
|
{completeness}%
|
|
</motion.span>
|
|
</div>
|
|
|
|
{/* Progress Bar */}
|
|
<div className="relative h-3 bg-gray-200 rounded-full overflow-hidden">
|
|
<motion.div
|
|
initial={{ width: 0 }}
|
|
animate={{ width: `${completeness}%` }}
|
|
transition={{ delay: 0.8, duration: 1, ease: "easeOut" }}
|
|
className="absolute top-0 left-0 h-full bg-gradient-to-r from-red-500 to-red-600 rounded-full"
|
|
/>
|
|
</div>
|
|
</motion.div>
|
|
</div>
|
|
|
|
{/* Cards Section */}
|
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-2 ">
|
|
|
|
{/* Desktop Logo */}
|
|
{/* <Box sx={{ display: { xs: "none", md: "flex" }, mr: 1 }}>
|
|
<LazyImage
|
|
src={Logo}
|
|
className="w-full h-[50px] rounded-lg object-cover"
|
|
/>
|
|
</Box> */}
|
|
|
|
<AstroChatUI/>
|
|
<div className="my-4 rounded-2xl bg-green-50 border border-1 border-green-200 p-4 ">
|
|
<motion.div
|
|
variants={container}
|
|
initial="hidden"
|
|
animate="show"
|
|
className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6"
|
|
>
|
|
|
|
{cards.map((card, index) => (
|
|
|
|
<div
|
|
onClick={() => navigate(card.url)}
|
|
|
|
className=" border border-1 border-red-50 bg-white rounded-3xl hover:bg-red-50 hover:border-2
|
|
flex flex-col items-center space-x-2 h-32 justify-center transition-colors duration-500
|
|
cursor-pointer ">
|
|
{/* Icon Container */}
|
|
<motion.div
|
|
initial={{ rotate: -180, opacity: 0 }}
|
|
animate={{ rotate: 0, opacity: 1 }}
|
|
transition={{ delay: 0.9 + index * 0.1, duration: 0.5 }}
|
|
// className={`${card.bgColor} p-0 rounded-xl border ${card.borderColor}`}
|
|
>
|
|
<LazyImage
|
|
src={card.icon}
|
|
alt={card.title}
|
|
className="w-ful h-full "
|
|
/>
|
|
</motion.div>
|
|
|
|
{/* Text */}
|
|
<motion.h3
|
|
initial={{ opacity: 0, x: -10 }}
|
|
animate={{ opacity: 1, x: 0 }}
|
|
transition={{ delay: 1 + index * 0.1, duration: 0.4 }}
|
|
className="text-[14px] sm:text-[16px] font-semibold text-gray-900"
|
|
>
|
|
{card.title}
|
|
</motion.h3>
|
|
</div>
|
|
|
|
|
|
|
|
))}
|
|
</motion.div>
|
|
|
|
<MembershipCard/>
|
|
|
|
</div>
|
|
</div>
|
|
{/* Additional Info Section */}
|
|
<motion.div
|
|
initial={{ opacity: 0, y: 20 }}
|
|
animate={{ opacity: 1, y: 0 }}
|
|
transition={{ delay: 1.5, duration: 0.6 }}
|
|
className="mt-8 text-center"
|
|
>
|
|
<p className="text-gray-600 text-sm sm:text-base">
|
|
Complete your profile to increase visibility and get better matches
|
|
</p>
|
|
</motion.div>
|
|
</motion.div>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default ProfileCompletion;
|