From 06ab04b26a3762ef5540fd6f010676c089164bac Mon Sep 17 00:00:00 2001 From: Anang Yusman Date: Sun, 2 Nov 2025 18:56:27 +0800 Subject: [PATCH] update --- app/details/[slug]/page.tsx | 19 ++++++++++++++ components/details/details-content.tsx | 29 ++++++++++++++++----- components/landing-page/headers-guard.tsx | 7 ++--- components/landing-page/headers-latest.tsx | 7 ++--- components/landing-page/headers-opinion.tsx | 7 ++--- components/landing-page/headers-peace.tsx | 7 ++--- components/landing-page/headers-popular.tsx | 7 ++--- components/landing-page/headers.tsx | 5 ++-- components/landing-page/lifestyle.tsx | 11 ++++---- components/landing-page/on-the-spot.tsx | 3 ++- components/table/article-table.tsx | 10 ++++--- service/article.ts | 7 +++++ 12 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 app/details/[slug]/page.tsx diff --git a/app/details/[slug]/page.tsx b/app/details/[slug]/page.tsx new file mode 100644 index 0000000..a509a5b --- /dev/null +++ b/app/details/[slug]/page.tsx @@ -0,0 +1,19 @@ +import DetailContent from "@/components/details/details-content"; +import Footer from "@/components/landing-page/footer"; +import Navbar from "@/components/landing-page/navbar"; +import Image from "next/image"; + +export default function Slug() { + return ( +
+
+ +
+ +
+ +
+
+
+ ); +} diff --git a/components/details/details-content.tsx b/components/details/details-content.tsx index aa68da1..7d61db9 100644 --- a/components/details/details-content.tsx +++ b/components/details/details-content.tsx @@ -2,7 +2,11 @@ import Image from "next/image"; import { useEffect, useState } from "react"; import Link from "next/link"; -import { getArticleById, getListArticle } from "@/service/article"; +import { + getArticleById, + getArticleBySlug, + getListArticle, +} from "@/service/article"; import { close, error, loading } from "@/config/swal"; import { useParams, usePathname } from "next/navigation"; import { CommentIcon } from "../icons/sidebar-icon"; @@ -15,6 +19,7 @@ import { } from "@/service/master-user"; import { saveActivity } from "@/service/activity-log"; import { useForm } from "react-hook-form"; +import { Badge } from "../ui/badge"; type TabKey = "trending" | "comments" | "latest"; @@ -24,6 +29,7 @@ type Article = { description: string; categoryName: string; createdAt: string; + slug: string; createdByName: string; thumbnailUrl: string; categories: { @@ -44,6 +50,7 @@ interface CategoryType { export default function DetailContent() { const params = useParams(); const id = params?.id; + const slug = params?.slug; const pathname = usePathname(); const [page, setPage] = useState(1); const [totalPage, setTotalPage] = useState(1); @@ -214,8 +221,8 @@ export default function DetailContent() { async function initStateData() { loading(); - const res = await getArticleById(id); - const data = res.data?.data; + const res = await getArticleBySlug(slug); + const data = res?.data?.data; setThumbnail(data?.thumbnailUrl); setDiseId(data?.aiArticleId); @@ -486,9 +493,17 @@ export default function DetailContent() {
{articleDetail?.tags ? ( - - {articleDetail.tags} - + articleDetail.tags + .split(",") // pisahkan berdasarkan koma + .map((tag: string, index: number) => ( + + {tag.trim()} + + )) ) : ( Tidak ada tag )} @@ -638,7 +653,7 @@ export default function DetailContent() {
{articles.map((article) => (
- + {article.title} READ MORE > @@ -168,7 +169,7 @@ export default function HeaderGuard() {

Recent Posts

{recentPosts.map((post, index) => (
- + {post.title} {articles.map((article) => (
- + {article.title} READ MORE > @@ -169,7 +170,7 @@ export default function HeaderLatest() {

Recent Posts

{recentPosts.map((post, index) => (
- + {post.title} {articles.map((article) => (
- + {article.title} READ MORE > @@ -168,7 +169,7 @@ export default function HeaderOpinion() {

Recent Posts

{recentPosts.map((post, index) => (
- + {post.title} {articles.map((article) => (
- + {article.title} READ MORE > @@ -168,7 +169,7 @@ export default function HeaderPeace() {

Recent Posts

{recentPosts.map((post, index) => (
- + {post.title} {articles.map((article) => (
- + {article.title} READ MORE > @@ -168,7 +169,7 @@ export default function HeaderPopular() {

Recent Posts

{recentPosts.map((post, index) => (
- + {post.title} ( ( ( ( ( ( ( {/* Thumbnail */} diff --git a/components/landing-page/on-the-spot.tsx b/components/landing-page/on-the-spot.tsx index ac004b8..89b36f9 100644 --- a/components/landing-page/on-the-spot.tsx +++ b/components/landing-page/on-the-spot.tsx @@ -12,6 +12,7 @@ type Article = { description: string; categoryName: string; createdAt: string; + slug: string; createdByName: string; customCreatorName: string; thumbnailUrl: string; @@ -114,7 +115,7 @@ export default function OnTheSpot() { {articles.map((item) => ( { + const copyUrlArticle = async (slug: any) => { const url = `${window.location.protocol}//${window.location.host}` + - "/detail/" + - `${id}`; + "/details/" + + `${slug}`; try { await navigator.clipboard.writeText(url); successToast("Success", "Article Copy to Clipboard"); @@ -263,7 +263,9 @@ export default function ArticleTable() { - copyUrlArticle(article.id)}> + copyUrlArticle(article.slug)} + > Copy Url Article diff --git a/service/article.ts b/service/article.ts index 569cef0..4f338cd 100644 --- a/service/article.ts +++ b/service/article.ts @@ -106,6 +106,13 @@ export async function getArticleById(id: any) { return await httpGet(`/articles/${id}`, headers); } +export async function getArticleBySlug(slug: any) { + const headers = { + "content-type": "application/json", + }; + return await httpGet(`/articles/slug/${slug}`, headers); +} + export async function deleteArticle(id: string) { const headers = { "content-type": "application/json",