update data
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
d969a83690
commit
f38f28aaee
|
|
@ -20,6 +20,7 @@ import {
|
||||||
Image as ImageIcon,
|
Image as ImageIcon,
|
||||||
FileText,
|
FileText,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
|
import { fetchPublishedArticles } from "@/lib/articles-public";
|
||||||
|
|
||||||
const LANDING_SECTION_IDS = new Set(["products", "services"]);
|
const LANDING_SECTION_IDS = new Set(["products", "services"]);
|
||||||
|
|
||||||
|
|
@ -49,6 +50,49 @@ export default function LandingSiteNav({
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const [openKonten, setOpenKonten] = useState(false);
|
const [openKonten, setOpenKonten] = useState(false);
|
||||||
const [activeMenu, setActiveMenu] = useState<string | null>(null);
|
const [activeMenu, setActiveMenu] = useState<string | null>(null);
|
||||||
|
const [event, setEvent] = useState<any>(null);
|
||||||
|
const [popular, setPopular] = useState<any[]>([]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const loadPopular = async () => {
|
||||||
|
const res = await fetchPublishedArticles(
|
||||||
|
{
|
||||||
|
typeId: 1,
|
||||||
|
limit: 3,
|
||||||
|
page: 1,
|
||||||
|
sortBy: "view_count",
|
||||||
|
sort: "desc",
|
||||||
|
},
|
||||||
|
{ mode: "client" },
|
||||||
|
);
|
||||||
|
|
||||||
|
setPopular(res?.items ?? []);
|
||||||
|
};
|
||||||
|
|
||||||
|
loadPopular();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const loadEvent = async () => {
|
||||||
|
const res = await fetchPublishedArticles(
|
||||||
|
{
|
||||||
|
typeId: 1,
|
||||||
|
limit: 1,
|
||||||
|
page: 1,
|
||||||
|
sortBy: "created_at",
|
||||||
|
sort: "desc",
|
||||||
|
},
|
||||||
|
{ mode: "client" },
|
||||||
|
);
|
||||||
|
|
||||||
|
const firstItem = res?.items?.[0];
|
||||||
|
if (firstItem) {
|
||||||
|
setEvent(firstItem);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
loadEvent();
|
||||||
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (pathname !== "/") return;
|
if (pathname !== "/") return;
|
||||||
|
|
@ -330,27 +374,58 @@ export default function LandingSiteNav({
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-auto grid grid-cols-2 gap-10 pt-10">
|
<div className="mt-auto grid grid-cols-2 gap-10 pt-10">
|
||||||
{/* POPULAR */}
|
{/* POPULAR */}
|
||||||
<div>
|
<ul className="space-y-3 text-sm">
|
||||||
<p className="text-sm opacity-70 mb-3">POPULAR PAGES</p>
|
<p className="text-[16px] opacity-70 mb-3">POPULAR PAGES</p>
|
||||||
<ul className="space-y-2 text-sm">
|
{popular.length > 0 ? (
|
||||||
<li>Berita 1...</li>
|
popular.map((item) => (
|
||||||
<li>Berita 2...</li>
|
<li key={item.id}>
|
||||||
<li>Berita 3...</li>
|
<Link
|
||||||
</ul>
|
href={`/news/${item.slug}`}
|
||||||
</div>
|
onClick={() => setOpen(false)}
|
||||||
|
className="hover:underline line-clamp-2 text-sm"
|
||||||
|
>
|
||||||
|
{item.title}
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<li className="opacity-50">Loading...</li>
|
||||||
|
)}
|
||||||
|
</ul>
|
||||||
|
|
||||||
{/* EVENT */}
|
{/* EVENT */}
|
||||||
<div>
|
<div>
|
||||||
<p className="text-sm opacity-70 mb-3">Upcoming Event</p>
|
<p className="text-sm opacity-70 mb-3">Upcoming Event</p>
|
||||||
<div className="bg-white/10 rounded-xl p-4 flex gap-3">
|
|
||||||
<div className="w-16 h-16 bg-white/20 rounded-md" />
|
{event ? (
|
||||||
<div>
|
<div className="bg-white/10 rounded-xl p-4 flex gap-4 items-center">
|
||||||
<p className="font-semibold">2026 Internal Conference</p>
|
{/* IMAGE */}
|
||||||
<p className="text-xs opacity-70">
|
<div className="w-20 h-20 rounded-md overflow-hidden bg-white/20 shrink-0">
|
||||||
Lorem ipsum dolor sit amet...
|
{event.thumbnailUrl ? (
|
||||||
</p>
|
<Image
|
||||||
|
src={event.thumbnailUrl}
|
||||||
|
alt={event.title}
|
||||||
|
width={80}
|
||||||
|
height={80}
|
||||||
|
className="w-full h-full object-cover"
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<div className="w-full h-full bg-white/20" />
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* TEXT */}
|
||||||
|
<div className="flex flex-col">
|
||||||
|
<p className="font-semibold line-clamp-2">{event.title}</p>
|
||||||
|
|
||||||
|
<p className="text-xs opacity-70 line-clamp-2">
|
||||||
|
{event.description?.slice(0, 120)}...
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
) : (
|
||||||
|
<p className="text-xs opacity-50">Loading...</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue