2025-03-28 08:25:30 +00:00
|
|
|
import React, { useEffect } from "react";
|
2025-03-26 06:00:17 +00:00
|
|
|
import {
|
|
|
|
CommentsIcon,
|
|
|
|
DownloadIcon,
|
|
|
|
EyeIconBig,
|
2025-04-30 10:53:24 +00:00
|
|
|
FilledStarsIconSmall,
|
2025-03-26 06:00:17 +00:00
|
|
|
StarsIconSmall,
|
|
|
|
VerifiedIcon,
|
|
|
|
} from "../../components/icons/marketPlaceIcons";
|
|
|
|
|
2025-03-26 07:02:09 +00:00
|
|
|
import assetImage from "../../assets/image/image.png";
|
2025-03-28 10:55:53 +00:00
|
|
|
import { getAssetDownload } from "../../services/marketplace/getAssetDownload";
|
2025-03-26 10:51:35 +00:00
|
|
|
|
|
|
|
interface CardProps {
|
|
|
|
assetName: string;
|
2025-03-29 07:27:16 +00:00
|
|
|
uploadedOn: number;
|
2025-03-26 10:51:35 +00:00
|
|
|
price: number;
|
|
|
|
rating: number;
|
|
|
|
views: number;
|
2025-03-28 08:25:30 +00:00
|
|
|
image: string;
|
2025-03-29 07:27:16 +00:00
|
|
|
description: string;
|
2025-03-26 10:51:35 +00:00
|
|
|
onSelectCard: (cardData: {
|
|
|
|
assetName: string;
|
2025-03-29 07:27:16 +00:00
|
|
|
uploadedOn: number;
|
2025-03-26 10:51:35 +00:00
|
|
|
price: number;
|
|
|
|
rating: number;
|
|
|
|
views: number;
|
2025-03-29 07:27:16 +00:00
|
|
|
description: string;
|
2025-03-26 10:51:35 +00:00
|
|
|
}) => void;
|
|
|
|
}
|
|
|
|
|
|
|
|
const Card: React.FC<CardProps> = ({
|
|
|
|
assetName,
|
|
|
|
uploadedOn,
|
|
|
|
price,
|
|
|
|
rating,
|
|
|
|
views,
|
2025-03-28 08:25:30 +00:00
|
|
|
image,
|
2025-03-29 07:27:16 +00:00
|
|
|
description,
|
2025-03-26 10:51:35 +00:00
|
|
|
onSelectCard,
|
|
|
|
}) => {
|
|
|
|
const handleCardSelect = () => {
|
2025-03-29 07:27:16 +00:00
|
|
|
onSelectCard({ assetName, uploadedOn, price, rating, views, description });
|
2025-03-26 10:51:35 +00:00
|
|
|
};
|
|
|
|
|
2025-03-26 06:00:17 +00:00
|
|
|
return (
|
|
|
|
<div className="card-container">
|
2025-03-28 10:55:53 +00:00
|
|
|
{/* <a href={getAssetDownload(assetName)} download className="icon">
|
2025-03-26 06:00:17 +00:00
|
|
|
<DownloadIcon />
|
2025-03-28 10:55:53 +00:00
|
|
|
</a> */}
|
2025-03-26 06:00:17 +00:00
|
|
|
<div className="image-container">
|
2025-03-28 08:25:30 +00:00
|
|
|
<img src={image} alt={assetName} />
|
2025-03-26 06:00:17 +00:00
|
|
|
</div>
|
|
|
|
<div className="assets-container">
|
|
|
|
<div className="name-container">
|
2025-03-28 08:25:30 +00:00
|
|
|
<div className="assets-name">{assetName.split("_").join(" ")}</div>
|
|
|
|
<div className="assets-date">
|
|
|
|
Uploaded on -{" "}
|
|
|
|
{new Date(uploadedOn).toLocaleDateString("en-GB", {
|
|
|
|
day: "2-digit",
|
|
|
|
month: "short",
|
|
|
|
year: "2-digit",
|
|
|
|
})}
|
|
|
|
</div>
|
2025-03-26 06:00:17 +00:00
|
|
|
</div>
|
|
|
|
<div className="details">
|
|
|
|
<div className="content">
|
|
|
|
<EyeIconBig />
|
2025-03-26 10:51:35 +00:00
|
|
|
{views}
|
2025-03-26 06:00:17 +00:00
|
|
|
</div>
|
|
|
|
<div className="content">
|
|
|
|
<CommentsIcon />
|
|
|
|
32
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2025-03-26 07:02:09 +00:00
|
|
|
|
2025-03-26 06:00:17 +00:00
|
|
|
<div className="vendor-icon">
|
|
|
|
HEXR FACTORY <VerifiedIcon />
|
|
|
|
</div>
|
|
|
|
<div className="stars-container">
|
2025-03-26 07:02:09 +00:00
|
|
|
<div className="stars-wrapper">
|
2025-03-26 10:51:35 +00:00
|
|
|
{[...Array(5)].map((_, index) => (
|
2025-04-30 10:53:24 +00:00
|
|
|
<>
|
|
|
|
{index < 3 ? (
|
|
|
|
<FilledStarsIconSmall key={index} />
|
|
|
|
) : (
|
|
|
|
<StarsIconSmall key={index} />
|
|
|
|
)}
|
|
|
|
</>
|
2025-03-26 10:51:35 +00:00
|
|
|
))}
|
2025-03-26 07:02:09 +00:00
|
|
|
</div>
|
2025-03-26 06:00:17 +00:00
|
|
|
<div className="units">
|
2025-03-26 10:51:35 +00:00
|
|
|
₹ {price}/<span>unit</span>
|
2025-03-26 06:00:17 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
2025-03-26 10:51:35 +00:00
|
|
|
<div className="buy-now-button" onClick={handleCardSelect}>
|
|
|
|
Buy now
|
|
|
|
</div>
|
2025-03-26 06:00:17 +00:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default Card;
|