'use client' import { useOrg } from '@components/Contexts/OrgContext' import AuthenticatedClientElement from '@components/Security/AuthenticatedClientElement' import ConfirmationModal from '@components/Objects/StyledElements/ConfirmationModal/ConfirmationModal' import { getUriWithOrg } from '@services/config/config' import { deleteCourseFromBackend } from '@services/courses/courses' import { getCourseThumbnailMediaDirectory, getUserAvatarMediaDirectory } from '@services/media/media' import { revalidateTags } from '@services/utils/ts/requests' import { BookMinus, FilePenLine, Settings2, MoreVertical } from 'lucide-react' import { useLHSession } from '@components/Contexts/LHSessionContext' import Link from 'next/link' import { useRouter } from 'next/navigation' import React from 'react' import toast from 'react-hot-toast' import UserAvatar from '@components/Objects/UserAvatar' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@components/ui/dropdown-menu" type Course = { course_uuid: string name: string description: string thumbnail_image: string org_id: string update_date: string authors?: Array<{ user: { id: string user_uuid: string avatar_image: string first_name: string last_name: string username: string } authorship: 'CREATOR' | 'CONTRIBUTOR' | 'MAINTAINER' | 'REPORTER' authorship_status: 'ACTIVE' | 'INACTIVE' | 'PENDING' }> } type PropsType = { course: Course orgslug: string customLink?: string } export const removeCoursePrefix = (course_uuid: string) => course_uuid.replace('course_', '') function CourseThumbnail({ course, orgslug, customLink }: PropsType) { const router = useRouter() const org = useOrg() as any const session = useLHSession() as any const activeAuthors = course.authors?.filter(author => author.authorship_status === 'ACTIVE') || [] const displayedAuthors = activeAuthors.slice(0, 3) const hasMoreAuthors = activeAuthors.length > 3 const remainingAuthorsCount = activeAuthors.length - 3 const deleteCourse = async () => { const toastId = toast.loading('Deleting course...') try { await deleteCourseFromBackend(course.course_uuid, session.data?.tokens?.access_token) await revalidateTags(['courses'], orgslug) toast.success('Course deleted successfully') router.refresh() } catch (error) { toast.error('Failed to delete course') } finally { toast.dismiss(toastId) } } const thumbnailImage = course.thumbnail_image ? getCourseThumbnailMediaDirectory(org?.org_uuid, course.course_uuid, course.thumbnail_image) : '../empty_thumbnail.png' return (
{course.description}