140 lines
4.5 KiB
JavaScript
140 lines
4.5 KiB
JavaScript
import { allBlogs } from "@/utlis/constant.utils";
|
|
import React from "react";
|
|
import Image from "next/image";
|
|
import Link from "next/link";
|
|
import AnimatedText from "@/components/common/AnimatedText";
|
|
|
|
function truncateWords(text, wordLimit) {
|
|
const words = text.split(" ");
|
|
return words.length > wordLimit
|
|
? words.slice(0, wordLimit).join(" ") + "..."
|
|
: text;
|
|
}
|
|
|
|
export default function Blogs() {
|
|
const [leftBlog, ...rightBlogs] = allBlogs.slice(0, 3);
|
|
|
|
return (
|
|
<section
|
|
id="blog"
|
|
className="news-section fix section-padding fix scrollSpySection"
|
|
>
|
|
<div className="shape-1 float-bob-y">
|
|
<Image
|
|
src="/assets/img/blog/blog-left.webp"
|
|
width={165}
|
|
height={116}
|
|
alt="img"
|
|
/>
|
|
</div>
|
|
<div className="shape-2 float-bob-x">
|
|
<Image
|
|
src="/assets/img/blog/blog-right.webp"
|
|
width={165}
|
|
height={116}
|
|
alt="img"
|
|
/>
|
|
</div>
|
|
<div className="container">
|
|
<div className="section-title text-center">
|
|
<h6 className="wow fadeInUp">
|
|
<i className="fa-regular fa-arrow-left-long" />
|
|
Blog & News
|
|
<i className="fa-regular fa-arrow-right-long" />
|
|
</h6>
|
|
<h2 className="splt-txt wow">
|
|
<AnimatedText text="Latest News & Blog" />
|
|
</h2>
|
|
</div>
|
|
|
|
<div className="row">
|
|
<div className="col-lg-6 wow fadeInUp" data-wow-delay=".2s">
|
|
{leftBlog && (
|
|
<div
|
|
key={leftBlog.id}
|
|
className="news-image-items bg-cover"
|
|
style={{ backgroundImage: `url("${leftBlog.image}")` }}
|
|
>
|
|
<div className="news-content">
|
|
<ul>
|
|
<li>
|
|
<i className="fa-regular fa-user" />
|
|
{leftBlog.author.name}
|
|
</li>
|
|
<li>
|
|
<i className="fa-solid fa-tag" />
|
|
{leftBlog.category}
|
|
</li>
|
|
</ul>
|
|
<h3>
|
|
<Link href={`/news-details/${leftBlog.slug}`}>
|
|
{truncateWords(leftBlog.title.replace(/<[^>]+>/g, ""), 12)
|
|
.split("<br />")
|
|
.map((line, index) => (
|
|
<React.Fragment key={index}>
|
|
{line}
|
|
<br />
|
|
</React.Fragment>
|
|
))}
|
|
</Link>
|
|
</h3>
|
|
<p className="text-white">
|
|
{truncateWords(leftBlog.description.replace(/<[^>]+>/g, ""), 25)}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
)}
|
|
</div>
|
|
|
|
<div className="col-lg-6">
|
|
<div className="news-right-items">
|
|
{rightBlogs.map((item) => (
|
|
<div
|
|
key={item.id}
|
|
className="news-card-items wow fadeInUp"
|
|
data-wow-delay={item.delay}
|
|
>
|
|
<div className="news-content">
|
|
<ul>
|
|
<li>
|
|
<i className="fa-regular fa-user" />
|
|
{item.author.name}
|
|
</li>
|
|
<li>
|
|
<i className="fa-solid fa-tag" />
|
|
{item.category}
|
|
</li>
|
|
</ul>
|
|
<h4>
|
|
<Link href={`/news-details/${item.slug}`}>
|
|
{truncateWords(item.title.replace(/<[^>]+>/g, ""), 8)}
|
|
</Link>
|
|
</h4>
|
|
<p>
|
|
{truncateWords(item.description.replace(/<[^>]+>/g, ""), 10)}
|
|
</p>
|
|
<Link
|
|
href={`/news-details/${item.slug}`}
|
|
className="link-btn"
|
|
>
|
|
Read More <i className="fa-regular fa-arrow-right-long" />
|
|
</Link>
|
|
</div>
|
|
<div className="news-image">
|
|
<Image
|
|
src={item.image}
|
|
width={247}
|
|
height={258}
|
|
alt="img"
|
|
/>
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
}
|