import { useParams, useOutletContext } from "@remix-run/react"; import { useSocket } from "../context"; import { useState, useEffect } from "react"; type ContextType = { selectedTask: any; }; export default function TaskSettings() { const { id } = useParams<{ id: string }>(); const socket = useSocket(); const { selectedTask } = useOutletContext(); const [frequency, setFrequency] = useState(selectedTask?.scheduledInterval || 1000); const [ttl, setTtl] = useState(selectedTask?.timedTTL || 0); // Add TTL state const [autoStart, setAutoStart] = useState(selectedTask?.autoStart || false); const [saveStatus, setSaveStatus] = useState<"saved" | "unsaved" | "saving">("saved"); // Update state when selectedTask changes useEffect(() => { if (selectedTask) { setFrequency(selectedTask.scheduledInterval || 1000); setTtl(selectedTask.timedTTL || 0); setAutoStart(selectedTask.autoStart || false); } }, [selectedTask]); const handleSave = () => { if (!socket || !selectedTask || !id) { console.error("Cannot save: missing socket connection or task data"); return; } setSaveStatus("saving"); const taskData = { id, scheduledInterval: frequency, ttl, // Add TTL to save data autoStart }; socket.emit("l33t_task_save", taskData); console.log("Saving task settings:", taskData); // Listen for task update to confirm save const handleTaskUpdate = (taskId: string, task: any) => { if (taskId === id) { setSaveStatus("saved"); setTimeout(() => { setSaveStatus("unsaved"); }, 2000); socket.off("l33t_task_update", handleTaskUpdate); } }; socket.on("l33t_task_update", handleTaskUpdate); }; return (
{ setFrequency(Number(e.target.value)); setSaveStatus("unsaved"); }} className="w-full p-2 bg-gray-800 rounded border border-gray-700 text-white" min="100" step="100" />
{ setTtl(Number(e.target.value)); setSaveStatus("unsaved"); }} className="w-full p-2 bg-gray-800 rounded border border-gray-700 text-white" min="0" step="100" placeholder="0 (no limit)" />

Set to 0 for no time limit

{ setAutoStart(e.target.checked); setSaveStatus("unsaved"); }} className="mr-2 bg-gray-800 border-gray-700 rounded" />
); }