"use client"; import { Modal } from "../ui/Modal"; import { Button } from "../ui/Button"; import { Input } from "../ui/Input"; import { BashEditor } from "../BashEditor"; import { BashSnippetHelper } from "../BashSnippetHelper"; import { FileText, Code, Plus, Edit } from "lucide-react"; import { showToast } from "../ui/Toast"; interface ScriptModalProps { isOpen: boolean; onClose: () => void; onSubmit: ( formData: FormData ) => Promise<{ success: boolean; message: string }>; title: string; submitButtonText: string; submitButtonIcon: React.ReactNode; form: { name: string; description: string; content: string; }; onFormChange: (updates: Partial) => void; additionalFormData?: Record; } export function ScriptModal({ isOpen, onClose, onSubmit, title, submitButtonText, submitButtonIcon, form, onFormChange, additionalFormData = {}, }: ScriptModalProps) { const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const formData = new FormData(); formData.append("name", form.name); formData.append("description", form.description); formData.append("content", form.content); Object.entries(additionalFormData).forEach(([key, value]) => { formData.append(key, value); }); const result = await onSubmit(formData); if (result.success) { onClose(); } else { showToast("error", `Failed to ${title.toLowerCase()}`, result.message); } }; const handleInsertSnippet = (snippet: string) => { onFormChange({ content: snippet }); }; return (
onFormChange({ name: e.target.value })} placeholder="My Script" required />
onFormChange({ description: e.target.value })} placeholder="What does this script do?" />

Snippets

Script Content

onFormChange({ content: value })} placeholder="#!/bin/bash # Your script here echo 'Hello World'" className="h-full" />
); }