import { useEffect, useState } from 'react'; import ReactQuill from 'react-quill'; import 'react-quill/dist/quill.snow.css'; import CodeMirror from '@uiw/react-codemirror'; import { html } from '@codemirror/lang-html'; import { javascript } from '@codemirror/lang-javascript'; import { php } from '@codemirror/lang-php'; import 'codemirror/lib/codemirror.css'; import 'codemirror/theme/material.css'; import PrimaryButton from '@/Components/PrimaryButton'; import { Code, Download, Minus, MinusCircle, Plus } from 'react-feather'; import FormGroup from '@/Components/FormGroup'; import InputLabel from '@/Components/InputLabel'; import TextInput from '@/Components/TextInput'; import AddFrameworkModal from '../AppFramework/AddModal'; import axios from 'axios'; interface InstructionsProps { instruction_id: number; onDelete: (instruction_id: number) => void; onUpdate: (instruction_id: number, steps: any[], frameworkID: string) => void; } interface Framework { id: number; framework_name: string; version: string; } export default function Instructions({ instruction_id, onDelete, onUpdate }: InstructionsProps) { const [frameworkID, setFrameworkID] = useState(''); const [frameworks, setFrameworks] = useState([]); const fetchFrameworks = async () => { try { const response = await axios.get(route('frameworks.index')); setFrameworks(response.data); } catch (error) { console.error('Failed to fetch frameworks', error); } }; useEffect(() => { fetchFrameworks(); }, []); const [isAddFrameworkModalOpen, setIsAddFrameworkModalOpen] = useState(false); const handleChange = (e: React.ChangeEvent) => { const selectedValue = e.target.value; setFrameworkID(selectedValue); if (selectedValue === "0") { setIsAddFrameworkModalOpen(true); } } const [steps, setSteps] = useState>([]); const handleAddStep = () => { setSteps([...steps, { title: '', content: '', code: '' }]); }; const handleRemoveStep = (step_id: number) => { setSteps(prevSteps => prevSteps.filter((_, index) => index !== step_id)); }; const handleTitleChange = (step_id: number, title: string) => { const newSteps = [...steps]; newSteps[step_id].title = title; setSteps(newSteps); onUpdate(instruction_id, newSteps, frameworkID); }; const handleContentChange = (step_id: number, content: string) => { const newSteps = [...steps]; newSteps[step_id].content = content; setSteps(newSteps); onUpdate(instruction_id, newSteps, frameworkID); }; const handleCodeChange = (step_id: number, code: string) => { const newSteps = [...steps]; newSteps[step_id].code = code; setSteps(newSteps); onUpdate(instruction_id, newSteps, frameworkID); }; return (

Instructions Editor

{steps.map((step, step_id) => (

Step {step_id + 1}

handleTitleChange(step_id, e.target.value)} className='w-1/4 mx-4' />

Textual Instruction:

handleContentChange(step_id, content)} className="h-1/2" modules={{ toolbar: [ ['bold', 'italic', 'underline'], [{'list': 'ordered'}, {'list': 'bullet'}], ['link', 'image', 'video'] ] }} />

Code Snippet:

handleCodeChange(step_id, value)} />
))}
Add Steps setIsAddFrameworkModalOpen(false)} onFrameworkAdded={fetchFrameworks} />
); };