diff --git a/apps/dimentorin/public/image/mentoring-banner.webp b/apps/dimentorin/public/image/mentoring-banner.webp new file mode 100644 index 0000000..6bebc1e Binary files /dev/null and b/apps/dimentorin/public/image/mentoring-banner.webp differ diff --git a/apps/dimentorin/src/app/(public)/_components/header.tsx b/apps/dimentorin/src/app/(public)/_components/header.tsx index 585e126..beff631 100644 --- a/apps/dimentorin/src/app/(public)/_components/header.tsx +++ b/apps/dimentorin/src/app/(public)/_components/header.tsx @@ -3,7 +3,7 @@ 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 { Link, useLocation } from "react-router-dom"; +import { Link, NavLink, useLocation } from "react-router-dom"; const MENUS: { label: string; href: string }[] = [ { label: "Home", href: "/" }, @@ -31,7 +31,7 @@ export const Header: FC = () => { }) return ( -
+
{ location.pathname === menu.href && "text-primary-500 hover:text-primary-500" )} > - {menu.label} + {menu.label} )} - + + +
- + + + +

+ Fullname +

+

+ Full Stack Enjoyer at name company +

+ +
+

Soft Skills :

+
+ + + +
+
+
+
+ ) +} diff --git a/apps/dimentorin/src/app/(public)/mentoring/_components/topics.tsx b/apps/dimentorin/src/app/(public)/mentoring/_components/topics.tsx new file mode 100644 index 0000000..7231469 --- /dev/null +++ b/apps/dimentorin/src/app/(public)/mentoring/_components/topics.tsx @@ -0,0 +1,73 @@ +import { CloudServerOutlined, CodeOutlined, DatabaseOutlined, ProjectOutlined, TabletOutlined } from '@ant-design/icons' +import { Icon } from '@iconify/react' +import { Button } from '@imphnen-frontend-service/ui/atoms' +import { For } from '@imphnen-frontend-service/utils' +import { FC, ReactElement, useRef } from 'react' +import { motion, useInView, Variants } from 'framer-motion' + +const TOPICS: { + name: string + icon: React.ReactNode +}[] = [ + { name: 'UI/UX & Design', icon: }, + { name: 'Software/Web Dev', icon: }, + { name: 'Data & AI', icon: }, + { name: 'Cloud & DevOps', icon: }, + { name: 'Cybersecurity', icon: }, + { name: 'IT & Networking', icon: }, + { name: 'Project Management', icon: }, + { name: 'QA & Testing', icon: } +] + +export const Topics: FC = (): ReactElement => { + const ref = useRef(null) + const isInView = useInView(ref, { once: true, amount: 0.2 }) + + const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.1, + delayChildren: 0.3, + delay: 0.4, + }, + }, + } + + const childVariants: Variants = { + hidden: { opacity: 0, y: 20 }, + visible: { + opacity: 1, + y: 0, + transition: { + duration: 0.4, + ease: [0.25, 0.46, 0.45, 0.94], + }, + }, + } + + return ( +
+ + + {(topic) => ( + + +

+ {topic.name} +

+
+ )} +
+
+
+ ) +} diff --git a/apps/dimentorin/src/app/(public)/mentoring/page.tsx b/apps/dimentorin/src/app/(public)/mentoring/page.tsx new file mode 100644 index 0000000..d8c92c4 --- /dev/null +++ b/apps/dimentorin/src/app/(public)/mentoring/page.tsx @@ -0,0 +1,121 @@ +import { FC, ReactElement, useRef, useState } from 'react'; +import { BannerSection } from './_components/banner-section'; +import { Topics } from './_components/topics'; +import { Input } from '@imphnen-frontend-service/ui/atoms'; +import { SearchOutlined } from '@ant-design/icons'; +import { For } from '@imphnen-frontend-service/utils'; +import { MentorCard } from './_components/mentor-card'; +import { Pagination } from '@imphnen-frontend-service/ui/molecules'; +import { getCoreRowModel, getPaginationRowModel, PaginationState, useReactTable } from '@tanstack/react-table'; +import { motion, useInView, Variants } from 'framer-motion'; + +const TEMP_DATA = [ + { id: 1, name: 'John Doe' }, + { id: 2, name: 'John Doe' }, + { id: 3, name: 'John Doe' }, + { id: 4, name: 'John Doe' }, +] + +export const Components: FC = (): ReactElement => { + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 3, + }); + + const table = useReactTable({ + data: TEMP_DATA, + columns: [], + state: { pagination }, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + onPaginationChange: setPagination, + }); + + const ref = useRef(null) + const isInView = useInView(ref, { once: true, amount: 0.2 }) + + const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.1, + delayChildren: 0.3, + }, + }, + } + + const childVariants: Variants = { + hidden: { opacity: 0, y: 20 }, + visible: { + opacity: 1, + y: 0, + transition: { + duration: 0.4, + ease: [0.25, 0.46, 0.45, 0.94], + }, + }, + } + + return ( +
+ + +
+ +
+ + Choose Your Topics + + + +
+ + + + + + + + + + {(_, index) => ( + + + + )} + + + + + +
+
+
+ ) +} + +export default Components diff --git a/apps/dimentorin/src/app/layout.tsx b/apps/dimentorin/src/app/layout.tsx new file mode 100644 index 0000000..bc85aa9 --- /dev/null +++ b/apps/dimentorin/src/app/layout.tsx @@ -0,0 +1,10 @@ +import { Outlet, ScrollRestoration } from "react-router-dom"; + +export default function RootLayout() { + return ( + <> + + + + ) +} \ No newline at end of file diff --git a/apps/dimentorin/src/middleware.ts b/apps/dimentorin/src/middleware.ts index c9e06f7..9dcb68e 100644 --- a/apps/dimentorin/src/middleware.ts +++ b/apps/dimentorin/src/middleware.ts @@ -14,6 +14,7 @@ const mappingPublicRoutes = [ '/auth/register/otp', '/auth/register/success', '/auth/new-password', + '/mentoring' ]; const mappingRoutePermissions = [