Advertisement
fr3gu

Untitled

Mar 2nd, 2025
539
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { useState } from "react";
  2.  
  3. type ConditionDefinition = {
  4.   typ: "MATH" | "BOOLEAN" | "STRING";
  5.   signalNames: string;
  6.   function: "ALL" | "ANY" | "AVG" | "MAX_DIFF_TO_MEAN";
  7.   comparisonValue: string;
  8.   mathOperator:
  9.     | "EQUAL"
  10.     | "NOT_EQUAL"
  11.     | "LESS_THAN"
  12.     | "LESS_THAN_OR_EQUAL"
  13.     | "GREATER_THAN"
  14.     | "GREATER_THAN_OR_EQUAL";
  15. };
  16.  
  17. export default function ConditionForm({
  18.   condition,
  19.   onChange,
  20. }: {
  21.   condition: ConditionDefinition;
  22.   onChange: (updatedCondition: ConditionDefinition) => void;
  23. }) {
  24.   const [localCondition, setLocalCondition] = useState(condition);
  25.  
  26.   const handleChange = (e: React.ChangeEvent<HTMLSelectElement | HTMLInputElement>) => {
  27.     const updated = { ...localCondition, [e.target.name]: e.target.value };
  28.     setLocalCondition(updated);
  29.     onChange(updated);
  30.   };
  31.  
  32.   return (
  33.     <div className="p-4 border rounded bg-white shadow-md">
  34.       <h3 className="font-bold">Condition</h3>
  35.       <label className="block">
  36.         Type:
  37.         <select name="typ" value={localCondition.typ} onChange={handleChange} className="block w-full border p-2 rounded">
  38.           {["MATH", "BOOLEAN", "STRING"].map((type) => (
  39.             <option key={type} value={type}>{type}</option>
  40.           ))}
  41.         </select>
  42.       </label>
  43.  
  44.       <label className="block">
  45.         Signal Names:
  46.         <input type="text" name="signalNames" value={localCondition.signalNames} onChange={handleChange} className="block w-full border p-2 rounded" />
  47.       </label>
  48.  
  49.       <label className="block">
  50.         Function:
  51.         <select name="function" value={localCondition.function} onChange={handleChange} className="block w-full border p-2 rounded">
  52.           {["ALL", "ANY", "AVG", "MAX_DIFF_TO_MEAN"].map((func) => (
  53.             <option key={func} value={func}>{func}</option>
  54.           ))}
  55.         </select>
  56.       </label>
  57.  
  58.       <label className="block">
  59.         Comparison Value:
  60.         <input type="text" name="comparisonValue" value={localCondition.comparisonValue} onChange={handleChange} className="block w-full border p-2 rounded" />
  61.       </label>
  62.  
  63.       <label className="block">
  64.         Math Operator:
  65.         <select name="mathOperator" value={localCondition.mathOperator} onChange={handleChange} className="block w-full border p-2 rounded">
  66.           {["EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL"].map((op) => (
  67.             <option key={op} value={op}>{op}</option>
  68.           ))}
  69.         </select>
  70.       </label>
  71.     </div>
  72.   );
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement