use slug for course urls & improve design
This commit is contained in:
parent
03c726605d
commit
c7ce43eee8
|
|
@ -26,6 +26,7 @@ a {
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
|
display: inline-block;
|
||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
padding: 0.75rem 1rem;
|
padding: 0.75rem 1rem;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import Link from 'next/link';
|
|
||||||
import Container from "@/components/Container";
|
import Container from "@/components/Container";
|
||||||
import { COURSES } from "@/mockData";
|
import { COURSES } from "@/mockData";
|
||||||
import { cn, formatPrice } from "@/utils";
|
import { cn, formatPrice } from "@/utils";
|
||||||
|
import Link from "next/link";
|
||||||
import styles from "./page.module.css";
|
import styles from "./page.module.css";
|
||||||
|
|
||||||
export default function CourseDetailPage({ params }) {
|
export default function CourseDetailPage({ params }) {
|
||||||
const course = COURSES.find((c) => c.id === params.courseId);
|
const course = COURSES.find((c) => c.slug === params.courseSlug);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main className={styles.root}>
|
<main className={styles.root}>
|
||||||
|
|
@ -19,14 +19,18 @@ export default function CourseDetailPage({ params }) {
|
||||||
<div>
|
<div>
|
||||||
<h1>{course.name}</h1>
|
<h1>{course.name}</h1>
|
||||||
<div>{course.instructor.name}</div>
|
<div>{course.instructor.name}</div>
|
||||||
<button className={cn(styles.buyButton, "btn btn-primary")}>
|
{true ? (
|
||||||
Satın Al: {formatPrice(course.price)}
|
<Link
|
||||||
</button>
|
href={`/kurslar/${params.courseSlug}/ogren`}
|
||||||
<br/>
|
className={cn(styles.button, "btn btn-primary")}
|
||||||
<br/>
|
>
|
||||||
<Link href={`/kurslar/${params.courseId}/ogren`} className={cn(styles.startButton, "btn btn-primary")}>
|
|
||||||
Eğitime Başla
|
Eğitime Başla
|
||||||
</Link>
|
</Link>
|
||||||
|
) : (
|
||||||
|
<button className={cn(styles.button, "btn btn-primary")}>
|
||||||
|
Satın Al: {formatPrice(course.price)}
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -24,11 +24,8 @@
|
||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
.buyButton {
|
.button {
|
||||||
margin-top: 1.5rem;
|
margin-top: 2rem;
|
||||||
}
|
|
||||||
.startButton {
|
|
||||||
margin-top: 1rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.description {
|
.description {
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
.root {
|
.root {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fit, 300px);
|
grid-template-columns: repeat(auto-fill, minmax(275px, 1fr));
|
||||||
justify-content: stretch;
|
justify-content: stretch;
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import styles from "./CourseGridItem.module.css";
|
||||||
export default function CourseGridItem({ course }) {
|
export default function CourseGridItem({ course }) {
|
||||||
return (
|
return (
|
||||||
<Link
|
<Link
|
||||||
href={`/kurslar/${course.id}`}
|
href={`/kurslar/${course.slug}`}
|
||||||
className={cn(styles.root, "pressable")}
|
className={cn(styles.root, "pressable")}
|
||||||
>
|
>
|
||||||
<img className={styles.image} src={course.imageUrl} alt="Kurs resmi" />
|
<img className={styles.image} src={course.imageUrl} alt="Kurs resmi" />
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { cn } from "@/utils";
|
||||||
import { ConnectButton } from "@rainbow-me/rainbowkit";
|
import { ConnectButton } from "@rainbow-me/rainbowkit";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import styles from "./Header.module.css";
|
import styles from "./Header.module.css";
|
||||||
|
|
@ -5,7 +6,7 @@ import styles from "./Header.module.css";
|
||||||
export default function Header() {
|
export default function Header() {
|
||||||
return (
|
return (
|
||||||
<header className={styles.root}>
|
<header className={styles.root}>
|
||||||
<Link className={styles.brand} href="/">
|
<Link className={cn(styles.brand, "pressable")} href="/">
|
||||||
<span>Cub</span>
|
<span>Cub</span>
|
||||||
<span className="fg-accent">Learn</span>
|
<span className="fg-accent">Learn</span>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
|
||||||
|
|
@ -16,23 +16,5 @@
|
||||||
.nav {
|
.nav {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 2.5rem;
|
gap: 1.5rem;
|
||||||
}
|
|
||||||
|
|
||||||
.search {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.search-input {
|
|
||||||
padding: 8px;
|
|
||||||
margin-right: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-button {
|
|
||||||
padding: 8px 16px;
|
|
||||||
background-color: #ff0000;
|
|
||||||
color: #fff;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ export const CATEGORIES = [
|
||||||
export const COURSES = [
|
export const COURSES = [
|
||||||
{
|
{
|
||||||
id: "1",
|
id: "1",
|
||||||
|
slug: "ethereum-ve-solidity",
|
||||||
name: "Ethereum ve Solidity",
|
name: "Ethereum ve Solidity",
|
||||||
description:
|
description:
|
||||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
||||||
|
|
@ -20,6 +21,7 @@ export const COURSES = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "2",
|
id: "2",
|
||||||
|
slug: "akilli-sozlesme-guvenligi",
|
||||||
name: "Akıllı Sözleşme Güvenliği",
|
name: "Akıllı Sözleşme Güvenliği",
|
||||||
description:
|
description:
|
||||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
||||||
|
|
@ -32,6 +34,7 @@ export const COURSES = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "3",
|
id: "3",
|
||||||
|
slug: "next-js-ile-onyuz-uygulamalari-gelistirme",
|
||||||
name: "Next.js ile Önyüz Uygulamaları Geliştirme",
|
name: "Next.js ile Önyüz Uygulamaları Geliştirme",
|
||||||
description:
|
description:
|
||||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
||||||
|
|
@ -44,10 +47,11 @@ export const COURSES = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "4",
|
id: "4",
|
||||||
|
slug: "pardus-a-giris",
|
||||||
name: "Pardus'a Giriş",
|
name: "Pardus'a Giriş",
|
||||||
description:
|
description:
|
||||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
||||||
price: "0.05",
|
price: "150",
|
||||||
imageUrl: "/course-images/pardus.jpg",
|
imageUrl: "/course-images/pardus.jpg",
|
||||||
instructor: {
|
instructor: {
|
||||||
name: "Berk Çiçek",
|
name: "Berk Çiçek",
|
||||||
|
|
@ -56,9 +60,11 @@ export const COURSES = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "5",
|
id: "5",
|
||||||
|
slug: "yapay-zekaya-giris",
|
||||||
name: "Yapay Zekaya Giriş",
|
name: "Yapay Zekaya Giriş",
|
||||||
description:
|
description:
|
||||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
||||||
|
price: "250",
|
||||||
imageUrl: "/course-images/ai.png",
|
imageUrl: "/course-images/ai.png",
|
||||||
instructor: {
|
instructor: {
|
||||||
name: "Muhammed Akıncı",
|
name: "Muhammed Akıncı",
|
||||||
|
|
@ -67,6 +73,7 @@ export const COURSES = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "6",
|
id: "6",
|
||||||
|
slug: "react-js-temelleri",
|
||||||
name: "React.js Temelleri",
|
name: "React.js Temelleri",
|
||||||
description:
|
description:
|
||||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
||||||
|
|
@ -79,6 +86,7 @@ export const COURSES = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "7",
|
id: "7",
|
||||||
|
slug: "avalanche-ile-merkeziyetsiz-uygulamalar",
|
||||||
name: "Avalanche ile Merkeziyetsiz Uygulamalar",
|
name: "Avalanche ile Merkeziyetsiz Uygulamalar",
|
||||||
description:
|
description:
|
||||||
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem vitae veritatis deserunt quidem hic ea repellendus fugiat ducimus tenetur. Fugit cumque quo saepe possimus rem qui odit vitae dignissimos reprehenderit!",
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,4 @@ export const cn = (...args) => {
|
||||||
return args.filter((arg) => typeof arg === "string").join(" ");
|
return args.filter((arg) => typeof arg === "string").join(" ");
|
||||||
};
|
};
|
||||||
|
|
||||||
export const formatPrice = (price) => `${price} ETH`;
|
export const formatPrice = (price) => `${price} DTL`;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue