diff --git a/apps/dimentorin/public/image/code-article.webp b/apps/dimentorin/public/image/code-article.webp new file mode 100644 index 0000000..74731c8 Binary files /dev/null and b/apps/dimentorin/public/image/code-article.webp differ diff --git a/apps/dimentorin/src/app/(public)/_components/header.tsx b/apps/dimentorin/src/app/(public)/_components/header.tsx index feabf4b..5d78641 100644 --- a/apps/dimentorin/src/app/(public)/_components/header.tsx +++ b/apps/dimentorin/src/app/(public)/_components/header.tsx @@ -2,7 +2,7 @@ import { CloseOutlined, MenuOutlined } from "@ant-design/icons"; import { Button } from "@imphnen-frontend-service/ui/atoms"; import { cn, For, Show } from "@imphnen-frontend-service/utils"; import { motion, useMotionValueEvent, useScroll, Variants } from "framer-motion"; -import { FC, useState } from "react"; +import { FC, useMemo, useState } from "react"; import { Link, NavLink, useLocation } from "react-router-dom"; const MENUS: { label: string; href: string }[] = [ @@ -30,6 +30,13 @@ export const Header: FC = () => { else setShow(true) }) + const isActive = useMemo(() => { + return (path: string) => { + if (path === '/' && location.pathname !== '/') return false + return location.pathname.includes(path) + } + }, [location.pathname]); + return (
{ variant="text" className={cn( "px-10 py-1.5 text-neutral-300 hover:text-neutral-400 lg:px-2.5 lg:py-2", - location.pathname === menu.href && "text-primary-500 hover:text-primary-500" + isActive(menu.href) && "text-primary-500 hover:text-primary-500" )} > {menu.label} diff --git a/apps/dimentorin/src/app/(public)/articles/[slug]/page.tsx b/apps/dimentorin/src/app/(public)/articles/[slug]/page.tsx new file mode 100644 index 0000000..6dda909 --- /dev/null +++ b/apps/dimentorin/src/app/(public)/articles/[slug]/page.tsx @@ -0,0 +1,88 @@ +import { Icon } from "@iconify/react"; +import { Button } from "@imphnen-frontend-service/ui/atoms"; +import { cn } from "@imphnen-frontend-service/utils"; +import { motion } from "framer-motion"; + +export default function DetailArticle() { + return ( +
+ +
+
+ + +
+ +
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

+

+ Writer’s Name +

+

+ 14 March 2025 +

+
+ 5 min read +
+
+
+ +
+
+ Cover Article +
+ +
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur, ultrices mauris. Maecenas vitae mattis tellus. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur, ultrices mauris. Maecenas vitae mattis tellus. Nullam quis imperdiet augue. Vestibulum auctor ornare leo, non suscipit magna interdum eu. Curabitur pellentesque nibh nibh, at maximus ante fermentum sit amet. Pellentesque commodo lacus at sodales sodales. Quisque sagittis orci ut diam condimentum, vel euismod erat placerat. In iaculis arcu eros, eget tempus orci facilisis id. +

+ + Code + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur, ultrices mauris. Maecenas vitae mattis tellus. Nullam quis imperdiet augue. Vestibulum auctor ornare leo, non suscipit magna interdum eu. Curabitur pellentesque nibh nibh, at maximus ante fermentum sit amet. Pellentesque commodo lacus at sodales sodales. Quisque sagittis orci ut diam condimentum, vel euismod erat placerat. In iaculis arcu eros, eget tempus orci facilisis id. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur, ultrices mauris. Maecenas vitae mattis tellus. Nullam quis imperdiet augue. Vestibulum auctor ornare leo, non suscipit magna interdum eu. Curabitur pellentesque nibh nibh, at maximus ante fermentum sit amet. Pellentesque commodo lacus at sodales sodales. Quisque sagittis orci ut diam condimentum, vel euismod erat placerat. In iaculis arcu eros, eget tempus orci facilisis id. +

+
+
+
+
+ ) +} diff --git a/apps/dimentorin/src/app/(public)/articles/_components/card/article.tsx b/apps/dimentorin/src/app/(public)/articles/_components/card/article.tsx index 947a388..6df135e 100644 --- a/apps/dimentorin/src/app/(public)/articles/_components/card/article.tsx +++ b/apps/dimentorin/src/app/(public)/articles/_components/card/article.tsx @@ -1,6 +1,7 @@ import { Button } from "@imphnen-frontend-service/ui/atoms" import { cn, Show } from "@imphnen-frontend-service/utils" import { FC } from "react" +import { Link } from "react-router-dom" export type ArticleCardProps = { variant?: "default" | "recent" | "featured" @@ -31,7 +32,8 @@ export const ArticleCard: FC = ({ variant = 'default' }) => {
5 min read
-

= ({ variant = 'default' }) => { )} > Lorem ipsum dolor sit amet, consectetur adipiscing elit. -

+