import React, { useState } from 'react'; import { useOrg } from '@components/Contexts/OrgContext'; import { useLHSession } from '@components/Contexts/LHSessionContext'; import { linkCourseToProduct } from '@services/payments/products'; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Search } from 'lucide-react'; import toast from 'react-hot-toast'; import { mutate } from 'swr'; import useSWR from 'swr'; import { getOrgCourses } from '@services/courses/courses'; import { getCoursesLinkedToProduct } from '@services/payments/products'; import Link from 'next/link'; import { getCourseThumbnailMediaDirectory } from '@services/media/media'; import { getUriWithOrg } from '@services/config/config'; interface LinkCourseModalProps { productId: string; onSuccess: () => void; } interface CoursePreviewProps { course: { id: string; name: string; description: string; thumbnail_image: string; course_uuid: string; }; orgslug: string; onLink: (courseId: string) => void; isLinked: boolean; } const CoursePreview = ({ course, orgslug, onLink, isLinked }: CoursePreviewProps) => { const org = useOrg() as any; const thumbnailImage = course.thumbnail_image ? getCourseThumbnailMediaDirectory(org?.org_uuid, course.course_uuid, course.thumbnail_image) : '../empty_thumbnail.png'; return (
{/* Thumbnail */}
{/* Content */}

{course.name}

{course.description}

{/* Action Button */}
{isLinked ? ( ) : ( )}
); }; export default function LinkCourseModal({ productId, onSuccess }: LinkCourseModalProps) { const [searchTerm, setSearchTerm] = useState(''); const org = useOrg() as any; const session = useLHSession() as any; const { data: courses } = useSWR( () => org && session ? [org.slug, searchTerm, session.data?.tokens?.access_token] : null, ([orgSlug, search, token]) => getOrgCourses(orgSlug, null, token) ); const { data: linkedCourses } = useSWR( () => org && session ? [`/payments/${org.id}/products/${productId}/courses`, session.data?.tokens?.access_token] : null, ([_, token]) => getCoursesLinkedToProduct(org.id, productId, token) ); const handleLinkCourse = async (courseId: string) => { try { const response = await linkCourseToProduct(org.id, productId, courseId, session.data?.tokens?.access_token); if (response.success) { mutate([`/payments/${org.id}/products`, session.data?.tokens?.access_token]); toast.success('Course linked successfully'); onSuccess(); } else { toast.error(response.data?.detail || 'Failed to link course'); } } catch (error) { toast.error('Failed to link course'); } }; const isLinked = (courseId: string) => { return linkedCourses?.data?.some((course: any) => course.id === courseId); }; return (
{/* Course List */}
{courses?.map((course: any) => ( ))} {/* Empty State */} {(!courses || courses.length === 0) && (
No courses found
)}
); }