import FormLayout, { FormField, FormLabelAndMessage, Input, Textarea, } from '@components/StyledElements/Form/Form'; import { useFormik } from 'formik'; import { AlertTriangle } from 'lucide-react'; import * as Form from '@radix-ui/react-form'; import React, { useEffect, useState } from 'react'; import { useCourse, useCourseDispatch } from '../../../Contexts/CourseContext'; import ThumbnailUpdate from './ThumbnailUpdate'; type EditCourseStructureProps = { orgslug: string course_uuid?: string } const validate = (values: any) => { const errors = {} as any; if (!values.name) { errors.name = 'Required'; } else if (values.name.length > 100) { errors.name = 'Must be 100 characters or less'; } if (!values.description) { errors.description = 'Required'; } else if (values.description.length > 1000) { errors.description = 'Must be 1000 characters or less'; } if (!values.learnings) { errors.learnings = 'Required'; } return errors; }; function EditCourseGeneral(props: EditCourseStructureProps) { const [error, setError] = useState(''); const course = useCourse(); const dispatchCourse = useCourseDispatch() as any; const { isLoading, courseStructure } = course as any; const formik = useFormik({ initialValues: { name: courseStructure?.name || '', description: courseStructure?.description || '', about: courseStructure?.about || '', learnings: courseStructure?.learnings || '', tags: courseStructure?.tags || '', public: courseStructure?.public || '', }, validate, onSubmit: async values => { try { // Add your submission logic here dispatchCourse({ type: 'setIsSaved' }); } catch (e) { setError('Failed to save course structure.'); } }, enableReinitialize: true, }) as any; useEffect(() => { if (!isLoading) { const formikValues = formik.values as any; const initialValues = formik.initialValues as any; const valuesChanged = Object.keys(formikValues).some( key => formikValues[key] !== initialValues[key] ); if (valuesChanged) { dispatchCourse({ type: 'setIsNotSaved' }); const updatedCourse = { ...courseStructure, ...formikValues, }; dispatchCourse({ type: 'setCourseStructure', payload: updatedCourse }); } } }, [formik.values, isLoading]); return (