HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/agentcloud/webapp/src/components/ParameterForm.tsx
import React from 'react';

export default function ParameterForm({ parameters, setParameters, readonly }) {

	const addParameter = () => {
		setParameters([...parameters, { name: '', type: '', description: '', required: false }]);
	};

	const updateParameter = (index, field, value) => {
		const newParameters = parameters.map((param, i) => {
			if (i === index) {
				return { ...param, [field]: value };
			}
			return param;
		});
		setParameters(newParameters);
	};

	const removeParameter = (index) => {
		setParameters(parameters.filter((_, i) => i !== index));
	};

	return (
		<div>				
			<label className='text-base font-semibold text-gray-900'>Parameters</label>
			{parameters.map((param, index) => (
				<div key={index} className='grid grid-cols-1 md:grid-cols-5 gap-4 mb-4'>
					<input
						readOnly={readonly}
						type='text'
						placeholder='Name'
						value={param.name}
						onChange={(e) => updateParameter(index, 'name', e.target.value)}
						className='rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6'
					/>
					<select
						disabled={readonly}
						value={param.type}
						onChange={(e) => updateParameter(index, 'type', e.target.value)}
						className='rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6'
					>
						<option value=''>Select Type</option>
						<option value='string'>String</option>
						<option value='integer'>Number</option>
						<option value='boolean'>Boolean</option>
						{/* Add more types as needed */}
					</select>
					<input
						readOnly={readonly}
						type='text'
						placeholder='Description'
						value={param.description}
						onChange={(e) => updateParameter(index, 'description', e.target.value)}
						className='col-span-2 w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6'
					/>
					<div className='col-span-1 flex justify-between items-center'>
						<label className='flex items-center space-x-2'>
							<input
								disabled={readonly}
								type='checkbox'
								checked={param.required}
								onChange={(e) => updateParameter(index, 'required', e.target.checked)}
								className='h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600 dark:bg-slate-800 dark:ring-slate-600'
							/>
							<span>Required</span>
						</label>

						{!readonly && <button
							type='button'
							onClick={() => removeParameter(index)}
							className='text-red-500 hover:text-red-700'
						>
							Remove
						</button>}
					</div>
				</div>
			))}
			{!readonly && <div className='flex justify-between mt-4'>
				<button
					type='button'
					onClick={addParameter}
					className='rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600'
				>
					Add Parameter
				</button>
			</div>}
		</div>
	);

};