"use client"; import { useQuery } from "@tanstack/react-query"; import { useMemo, useState } from "react"; import { get } from "../../lib/api"; interface PathConfigEditorProps { value: any; onChange: (value: any) => void; } export default function PathConfigEditor({ value, onChange }: PathConfigEditorProps) { const [useJsonMode, setUseJsonMode] = useState(false); const [jsonValue, setJsonValue] = useState(""); const [formData, setFormData] = useState>({}); // Fetch handbrake presets on mount const { data: handbrakePresets = [] } = useQuery({ queryKey: ["handbrake", "presets"], queryFn: () => get("/handbrake/presets"), select: (data) => (Array.isArray(data) ? data : []) }); // Fetch extensions from settings const { data: extensions = [] } = useQuery({ queryKey: ["config", "settings", "extensions"], queryFn: () => get("/config/settings/extensions"), select: (data) => (Array.isArray(data) ? data : []) }); // Initialize form data and json value - default to form mode const derivedFormData = useMemo(() => { if (value && typeof value === "object" && !Array.isArray(value)) { return { ...value }; } return {}; }, [value]); const derivedJsonValue = useMemo(() => { return JSON.stringify(value || {}, null, 2); }, [value]); const handleJsonChange = (newJson: string) => { try { const parsed = JSON.parse(newJson); onChange(parsed); } catch { // Invalid JSON, don't update parent yet } }; const handleFormFieldChange = (key: string, fieldValue: any) => { const newFormData = { ...derivedFormData, [key]: fieldValue }; onChange(newFormData); }; const addFormField = () => { const newKey = `field_${Object.keys(derivedFormData).length + 1}`; handleFormFieldChange(newKey, ""); }; const removeFormField = (key: string) => { const newFormData = { ...derivedFormData }; delete newFormData[key]; onChange(newFormData); }; const switchToJsonMode = () => { setUseJsonMode(true); onChange(derivedFormData); }; const switchToFormMode = () => { try { // When switching to form mode, we use the current value (which comes from props) if (typeof value === "object" && !Array.isArray(value)) { setUseJsonMode(false); return; } // If we can't convert to form mode, stay in JSON mode } catch { // Invalid JSON, stay in JSON mode } }; // Render specific field types const renderFieldInput = (key: string, val: any) => { switch (key) { case "exts": return (

Hold Ctrl/Cmd to select multiple

); case "ext": return ( ); case "preset": return ( ); case "clean": return (