fix:detail news space y, temporary filtered duplicate image

This commit is contained in:
Rama Priyanto 2025-06-20 16:02:55 +07:00
commit bcd14fdef0
2 changed files with 39 additions and 13 deletions

View File

@ -8,7 +8,7 @@ type Props = {
}; };
export async function generateMetadata({ params }: any): Promise<Metadata> { export async function generateMetadata({ params }: any): Promise<Metadata> {
const res = await getArticleById(params.id?.split("-")[0]); const res = await getArticleById(params?.id?.split("-")[0]);
const article = res?.data?.data; const article = res?.data?.data;
return { return {
title: article.title, title: article.title,
@ -22,7 +22,7 @@ export async function generateMetadata({ params }: any): Promise<Metadata> {
} }
export default async function NewsPage({ params }: any) { export default async function NewsPage({ params }: any) {
const articleId = params.id?.split("-")[0]; const articleId = params?.id?.split("-")[0];
const res = await getArticleById(articleId); const res = await getArticleById(articleId);
const article = res?.data?.data; const article = res?.data?.data;
return ( return (

View File

@ -39,6 +39,32 @@ export default function DetailNews(props: { data: any; listArticle: any }) {
const params = useParams(); const params = useParams();
const id: any = params?.id; const id: any = params?.id;
const shareText = "Humas Polri"; const shareText = "Humas Polri";
const [filteredFiles, setFilteredFiles] = useState<any>([]);
useEffect(() => {
getUniqueBaseFiles(data?.files);
}, [data]);
function extractBaseName(fileName: string): string {
const match = fileName.match(/^(.+?)_\w+\.(jpg|jpeg|png|webp)$/i);
return match ? match[1] : fileName;
}
const getUniqueBaseFiles = (files: any) => {
if (files && files.length > 0) {
const seen = new Set<string>();
const result: any = [];
for (const file of files) {
const baseName = extractBaseName(file.file_name);
if (!seen.has(baseName)) {
seen.add(baseName);
result.push(file);
}
}
setFilteredFiles(result);
}
};
const handleShare = async (platform: string) => { const handleShare = async (platform: string) => {
let shareLink = ""; let shareLink = "";
@ -157,9 +183,9 @@ export default function DetailNews(props: { data: any; listArticle: any }) {
</p> </p>
</div> </div>
<div className="flex justify-center my-2 lg:my-5"> <div className="flex justify-center my-2 lg:my-5">
{data?.files ? ( {filteredFiles ? (
data?.files[0]?.file_name.split(".")[1].includes("doc") || filteredFiles[0]?.file_name.split(".")[1].includes("doc") ||
data?.files[0]?.file_name.split(".")[1].includes("pdf") ? ( filteredFiles[0]?.file_name.split(".")[1].includes("pdf") ? (
<Image <Image
classNames={{ classNames={{
wrapper: "!w-full !max-w-full", wrapper: "!w-full !max-w-full",
@ -170,14 +196,14 @@ export default function DetailNews(props: { data: any; listArticle: any }) {
className="object-cover w-[100%] rounded-md" className="object-cover w-[100%] rounded-md"
/> />
) : ( ) : (
data?.files?.length > 0 && ( filteredFiles?.length > 0 && (
<Image <Image
// classNames={{ // classNames={{
// wrapper: "!w-full !max-w-full", // wrapper: "!w-full !max-w-full",
// img: "!w-full", // img: "!w-full",
// }} // }}
alt="Main Image" alt="Main Image"
src={data?.files[imageNow]?.file_url} src={filteredFiles[imageNow]?.file_url}
className="object-cover w-auto h-[360px] md:h-[480px] mx-auto rounded-md" className="object-cover w-auto h-[360px] md:h-[480px] mx-auto rounded-md"
/> />
) )
@ -186,10 +212,10 @@ export default function DetailNews(props: { data: any; listArticle: any }) {
"" ""
)} )}
</div> </div>
{data?.files?.length > 0 && {filteredFiles?.length > 0 &&
(data.files[0].file_name.split(".")[1].includes("doc") || (filteredFiles[0].file_name.split(".")[1].includes("doc") ||
data.files[0].file_name.split(".")[1].includes("pdf") ? ( filteredFiles[0].file_name.split(".")[1].includes("pdf") ? (
data.files?.map((file: any, index: number) => ( filteredFiles?.map((file: any, index: number) => (
<Accordion key={file?.id} variant="splitted" className="px-0"> <Accordion key={file?.id} variant="splitted" className="px-0">
<AccordionItem <AccordionItem
key={file?.id} key={file?.id}
@ -242,7 +268,7 @@ export default function DetailNews(props: { data: any; listArticle: any }) {
)) ))
) : ( ) : (
<div className="flex flex-row gap-3 flex-nowrap overflow-x-auto"> <div className="flex flex-row gap-3 flex-nowrap overflow-x-auto">
{data?.files?.map((file: any, index: number) => ( {filteredFiles?.map((file: any, index: number) => (
<a <a
key={file.id} key={file.id}
onClick={() => setImageNow(index)} onClick={() => setImageNow(index)}
@ -261,7 +287,7 @@ export default function DetailNews(props: { data: any; listArticle: any }) {
dangerouslySetInnerHTML={removeImgTags( dangerouslySetInnerHTML={removeImgTags(
formatTextToHtmlTag(data?.htmlDescription) formatTextToHtmlTag(data?.htmlDescription)
)} )}
className="text-sm lg:text-xl lg:leading-8 text-justify space-y-4" className="text-sm lg:text-xl lg:leading-8 text-justify"
/> />
<div className="bg-gray-50 dark:bg-black text-black dark:text-white rounded-lg justify-center items-center p-4 flex flex-col gap-3"> <div className="bg-gray-50 dark:bg-black text-black dark:text-white rounded-lg justify-center items-center p-4 flex flex-col gap-3">