import { PencilLine, Rss, TentTree } from 'lucide-react' import React, { useEffect } from 'react' import { motion } from 'framer-motion' import { useFormik } from 'formik' import * as Form from '@radix-ui/react-form' import FormLayout, { FormField, FormLabelAndMessage, Input, Textarea, } from '@components/StyledElements/Form/Form' import { useCourse } from '@components/Contexts/CourseContext' import useSWR, { mutate } from 'swr' import { getAPIUrl } from '@services/config/config' import { swrFetcher } from '@services/utils/ts/requests' import useAdminStatus from '@components/Hooks/useAdminStatus' import { useOrg } from '@components/Contexts/OrgContext' import { createCourseUpdate, deleteCourseUpdate } from '@services/courses/updates' import toast from 'react-hot-toast' import ConfirmationModal from '@components/StyledElements/ConfirmationModal/ConfirmationModal' function CourseUpdates() { const course = useCourse() as any; const { data: updates } = useSWR(`${getAPIUrl()}courses/${course?.courseStructure.course_uuid}/updates`, swrFetcher) const [isModelOpen, setIsModelOpen] = React.useState(false) function handleModelOpen() { setIsModelOpen(!isModelOpen) } // if user clicks outside the model, close the model React.useLayoutEffect(() => { function handleClickOutside(event: any) { console.log(event.target.id) if (event.target.closest('.bg-white') || event.target.id === 'delete-update-button') return; setIsModelOpen(false); } document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); return (
Updates {updates && {updates.length}}
{isModelOpen && }
) } const UpdatesSection = () => { const [selectedView, setSelectedView] = React.useState('list') const isAdmin = useAdminStatus() as boolean; return (
Updates
{isAdmin &&
setSelectedView('new')} className='py-2 px-4 space-x-2 items-center flex cursor-pointer text-xs font-medium hover:bg-gray-200 bg-gray-100 outline outline-1 outline-neutral-200/40'> New Update
}
{selectedView === 'list' && } {selectedView === 'new' && }
) } const NewUpdateForm = ({ setSelectedView }: any) => { const org = useOrg() as any; const course = useCourse() as any; const validate = (values: any) => { const errors: any = {} if (!values.title) { errors.title = 'Title is required' } if (!values.content) { errors.content = 'Content is required' } return errors } const formik = useFormik({ initialValues: { title: '', content: '' }, validate, onSubmit: async (values) => { const body = { title: values.title, content: values.content, course_uuid: course.courseStructure.course_uuid, org_id: org.id } const res = await createCourseUpdate(body) if (res.status === 200) { toast.success('Update added successfully') setSelectedView('list') mutate(`${getAPIUrl()}courses/${course?.courseStructure.course_uuid}/updates`) } else { toast.error('Failed to add update') } }, enableReinitialize: true, }) useEffect(() => { } , [course, org]) return (
Test Course
Add new Course Update