"use client"; import { Modal } from "@/app/_components/GlobalComponents/UIElements/Modal"; import { Button } from "@/app/_components/GlobalComponents/UIElements/Button"; import { Input } from "@/app/_components/GlobalComponents/FormElements/Input"; import { BashEditor } from "@/app/_components/FeatureComponents/Scripts/BashEditor"; import { BashSnippetHelper } from "@/app/_components/FeatureComponents/Scripts/BashSnippetHelper"; import { showToast } from "@/app/_components/GlobalComponents/UIElements/Toast"; import { FileText, Code, Info, Trash2 } from "lucide-react"; import { useTranslations } from "next-intl"; 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; isDraft?: boolean; onClearDraft?: () => void; } export const ScriptModal = ({ isOpen, onClose, onSubmit, title, submitButtonText, submitButtonIcon, form, onFormChange, additionalFormData = {}, isDraft = false, onClearDraft, }: ScriptModalProps) => { const t = useTranslations(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!form.name.trim()) { showToast("error", "Validation Error", "Script name is required"); return; } if (!form.content.trim()) { showToast("error", "Validation Error", "Script content is required"); return; } const formData = new FormData(); formData.append("name", form.name.trim()); formData.append("description", form.description.trim()); formData.append("content", form.content.trim()); 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 className={ !form.name.trim() ? "border-red-300 focus:border-red-500 focus:ring-red-500" : "" } />
onFormChange({ description: e.target.value })} placeholder="What does this script do?" />

Snippets

Script Content *

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