Files
parcer/src/components/run/RunSettings.tsx

157 lines
4.2 KiB
TypeScript
Raw Normal View History

2025-01-27 12:12:40 +05:30
import React, { useState, useEffect, useRef } from "react";
2025-01-09 19:49:20 +05:30
import { GenericModal } from "../ui/GenericModal";
2024-10-29 04:38:58 +05:30
import { MenuItem, TextField, Typography, Switch, FormControlLabel } from "@mui/material";
import { Dropdown } from "../ui/DropdownMui";
2024-06-24 22:38:44 +05:30
import Button from "@mui/material/Button";
2025-01-09 20:09:46 +05:30
import { modalStyle } from "../recorder/AddWhereCondModal";
2024-06-24 22:38:44 +05:30
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) => {
2024-10-29 04:38:58 +05:30
const [settings, setSettings] = useState<RunSettings>({
2024-06-24 22:38:44 +05:30
maxConcurrency: 1,
maxRepeats: 1,
debug: true,
});
2024-10-29 04:38:58 +05:30
const [showInterpreterSettings, setShowInterpreterSettings] = useState(false);
2025-01-27 12:12:40 +05:30
const hasRun = useRef(false);
2024-10-29 04:38:58 +05:30
2025-01-26 23:57:47 +05:30
useEffect(() => {
2025-01-27 12:12:40 +05:30
if (!isOpen) {
hasRun.current = false;
return;
}
if (!showInterpreterSettings && !hasRun.current) {
hasRun.current = true;
2025-01-26 23:58:19 +05:30
handleStart(settings);
2025-01-26 23:57:47 +05:30
}
2025-01-27 12:12:40 +05:30
}, [isOpen, showInterpreterSettings, settings, handleStart]);
2025-01-26 23:48:21 +05:30
if (!showInterpreterSettings) {
2025-01-26 23:51:45 +05:30
return null;
2025-01-26 23:48:21 +05:30
}
2024-06-24 22:38:44 +05:30
return (
<GenericModal
isOpen={isOpen}
onClose={handleClose}
modalStyle={modalStyle}
>
2025-01-26 23:48:21 +05:30
<div
style={{
display: "flex",
flexDirection: "column",
alignItems: "flex-start",
marginLeft: "65px",
}}
>
2024-10-29 04:38:58 +05:30
{isTask && (
<React.Fragment>
2025-01-26 23:48:21 +05:30
<Typography sx={{ margin: "20px 0px" }}>
Recording parameters:
</Typography>
2024-10-29 04:38:58 +05:30
{params?.map((item, index) => (
<TextField
2025-01-26 23:48:21 +05:30
sx={{ marginBottom: "15px" }}
2024-10-29 04:38:58 +05:30
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
2025-01-26 23:48:21 +05:30
control={
<Switch
checked={showInterpreterSettings}
onChange={() =>
setShowInterpreterSettings(!showInterpreterSettings)
}
/>
}
2024-10-29 04:52:36 +05:30
label="Developer Mode Settings"
2025-01-26 23:48:21 +05:30
sx={{ margin: "20px 0px" }}
2024-06-24 22:38:44 +05:30
/>
2024-10-29 04:38:58 +05:30
{showInterpreterSettings && (
<React.Fragment>
<TextField
2025-01-26 23:48:21 +05:30
sx={{ marginBottom: "15px" }}
2024-10-29 04:38:58 +05:30
type="number"
label="Max Concurrency"
required
onChange={(e) =>
setSettings({
...settings,
maxConcurrency: parseInt(e.target.value, 10),
})
}
defaultValue={settings.maxConcurrency}
/>
<TextField
2025-01-26 23:48:21 +05:30
sx={{ marginBottom: "15px" }}
2024-10-29 04:38:58 +05:30
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>
)}
2025-01-26 23:48:21 +05:30
<Button
variant="contained"
onClick={() => handleStart(settings)}
sx={{ marginTop: "20px" }}
>
Run Robot
</Button>
2024-06-24 22:38:44 +05:30
</div>
</GenericModal>
);
2024-10-29 04:38:58 +05:30
};