|
1 | 1 | "use client"; |
2 | 2 |
|
3 | 3 | import { memo } from "react"; |
4 | | -import Link from "next/link"; |
| 4 | +import { useRouter } from "next/navigation"; |
5 | 5 | import Image from "next/image"; |
6 | 6 | import { cn } from "@/lib/utils/cn"; |
7 | 7 | import { Card, CardContent, CardFooter } from "@/components/ui/card"; |
@@ -44,19 +44,36 @@ export const CourseCard = memo(function CourseCard({ |
44 | 44 | onContinue, |
45 | 45 | className, |
46 | 46 | }: CourseCardProps) { |
| 47 | + const router = useRouter(); |
| 48 | + |
| 49 | + const handleNavigate = () => { |
| 50 | + router.push(`/courses/${course.id}`); |
| 51 | + }; |
| 52 | + |
| 53 | + const handleCardKeyDown = (e: React.KeyboardEvent) => { |
| 54 | + if (e.key === "Enter" || e.key === " ") { |
| 55 | + e.preventDefault(); |
| 56 | + handleNavigate(); |
| 57 | + } |
| 58 | + }; |
| 59 | + |
47 | 60 | const handleEnroll = (e: React.MouseEvent) => { |
48 | | - e.preventDefault(); |
| 61 | + e.stopPropagation(); |
49 | 62 | onEnroll?.(course.id); |
50 | 63 | }; |
51 | 64 |
|
52 | 65 | const handleContinue = (e: React.MouseEvent) => { |
53 | | - e.preventDefault(); |
| 66 | + e.stopPropagation(); |
54 | 67 | onContinue?.(course.id); |
55 | 68 | }; |
56 | 69 |
|
57 | 70 | return ( |
58 | | - <Link href={`/courses/${course.id}`}> |
59 | 71 | <Card |
| 72 | + role="link" |
| 73 | + tabIndex={0} |
| 74 | + aria-label={course.title} |
| 75 | + onClick={handleNavigate} |
| 76 | + onKeyDown={handleCardKeyDown} |
60 | 77 | className={cn( |
61 | 78 | "group cursor-pointer transition-all hover:shadow-lg hover:-translate-y-1", |
62 | 79 | className, |
@@ -107,9 +124,9 @@ export const CourseCard = memo(function CourseCard({ |
107 | 124 |
|
108 | 125 | <div |
109 | 126 | className="absolute top-2 right-2" |
110 | | - onClick={(e) => e.preventDefault()} |
| 127 | + onClick={(e) => e.stopPropagation()} |
111 | 128 | onKeyDown={(e) => { |
112 | | - if (e.key === "Enter" || e.key === " ") e.preventDefault(); |
| 129 | + if (e.key === "Enter" || e.key === " ") e.stopPropagation(); |
113 | 130 | }} |
114 | 131 | > |
115 | 132 | <DropdownMenu> |
@@ -192,6 +209,5 @@ export const CourseCard = memo(function CourseCard({ |
192 | 209 | )} |
193 | 210 | </CardFooter> |
194 | 211 | </Card> |
195 | | - </Link> |
196 | 212 | ); |
197 | 213 | }); |
0 commit comments