Files
parcer/src/components/run/RunSettings.tsx
2025-01-27 12:12:40 +05:30

157 lines
4.2 KiB
TypeScript

import React, { useState, useEffect, useRef } from "react";
import { GenericModal } from "../ui/GenericModal";
import { MenuItem, TextField, Typography, Switch, FormControlLabel } from "@mui/material";
import { Dropdown } from "../ui/DropdownMui";
import Button from "@mui/material/Button";
import { modalStyle } from "../recorder/AddWhereCondModal";
interface RunSettingsProps {
isOpen: boolean;
handleStart: (settings: RunSettings) => void;
handleClose: () => void;
isTask: boolean;
params?: string[];
}
export interface RunSettings {
maxConcurrency: number;
maxRepeats: number;
debug: boolean;
params?: any;
}
export const RunSettingsModal = ({ isOpen, handleStart, handleClose, isTask, params }: RunSettingsProps) => {
const [settings, setSettings] = useState<RunSettings>({
maxConcurrency: 1,
maxRepeats: 1,
debug: true,
});
const [showInterpreterSettings, setShowInterpreterSettings] = useState(false);
const hasRun = useRef(false);
useEffect(() => {
if (!isOpen) {
hasRun.current = false;
return;
}
if (!showInterpreterSettings && !hasRun.current) {
hasRun.current = true;
handleStart(settings);
}
}, [isOpen, showInterpreterSettings, settings, handleStart]);
if (!showInterpreterSettings) {
return null;
}
return (
<GenericModal
isOpen={isOpen}
onClose={handleClose}
modalStyle={modalStyle}
>
<div
style={{
display: "flex",
flexDirection: "column",
alignItems: "flex-start",
marginLeft: "65px",
}}
>
{isTask && (
<React.Fragment>
<Typography sx={{ margin: "20px 0px" }}>
Recording parameters:
</Typography>
{params?.map((item, index) => (
<TextField
sx={{ marginBottom: "15px" }}
key={`param-${index}`}
type="string"
label={item}
required
onChange={(e) =>
setSettings({
...settings,
params: settings.params
? { ...settings.params, [item]: e.target.value }
: { [item]: e.target.value },
})
}
/>
))}
</React.Fragment>
)}
<FormControlLabel
control={
<Switch
checked={showInterpreterSettings}
onChange={() =>
setShowInterpreterSettings(!showInterpreterSettings)
}
/>
}
label="Developer Mode Settings"
sx={{ margin: "20px 0px" }}
/>
{showInterpreterSettings && (
<React.Fragment>
<TextField
sx={{ marginBottom: "15px" }}
type="number"
label="Max Concurrency"
required
onChange={(e) =>
setSettings({
...settings,
maxConcurrency: parseInt(e.target.value, 10),
})
}
defaultValue={settings.maxConcurrency}
/>
<TextField
sx={{ marginBottom: "15px" }}
type="number"
label="Max Repeats"
required
onChange={(e) =>
setSettings({
...settings,
maxRepeats: parseInt(e.target.value, 10),
})
}
defaultValue={settings.maxRepeats}
/>
<Dropdown
id="debug"
label="Debug Mode"
value={settings.debug?.toString()}
handleSelect={(e) =>
setSettings({
...settings,
debug: e.target.value === "true",
})
}
>
<MenuItem value="true">true</MenuItem>
<MenuItem value="false">false</MenuItem>
</Dropdown>
</React.Fragment>
)}
<Button
variant="contained"
onClick={() => handleStart(settings)}
sx={{ marginTop: "20px" }}
>
Run Robot
</Button>
</div>
</GenericModal>
);
};