feat(wip): schedule settings

This commit is contained in:
karishmas6
2024-09-12 22:17:30 +05:30
parent 12f54c09ab
commit e2e8c9da47

View File

@@ -9,25 +9,29 @@ interface ScheduleSettingsProps {
isOpen: boolean; isOpen: boolean;
handleStart: (settings: ScheduleSettings) => void; handleStart: (settings: ScheduleSettings) => void;
handleClose: () => void; handleClose: () => void;
isTask: boolean;
params?: string[];
} }
export interface ScheduleSettings { export interface ScheduleSettings {
maxConcurrency: number; runEvery: number;
maxRepeats: number; runEveryUnit: string;
debug: boolean; startFrom: string;
params?: any; atTime: string;
timezone: string;
} }
export const ScheduleSettingsModal = ({ isOpen, handleStart, handleClose, isTask, params }: ScheduleSettingsProps) => { export const ScheduleSettingsModal = ({ isOpen, handleStart, handleClose }: ScheduleSettingsProps) => {
const [settings, setSettings] = useState<ScheduleSettings>({
const [settings, setSettings] = React.useState<ScheduleSettings>({ runEvery: 1,
maxConcurrency: 1, runEveryUnit: 'hours',
maxRepeats: 1, startFrom: 'Monday',
debug: true, atTime: '00:00',
timezone: 'UTC'
}); });
const handleChange = (field: keyof ScheduleSettings, value: string | number) => {
setSettings(prev => ({ ...prev, [field]: value }));
};
return ( return (
<GenericModal <GenericModal
isOpen={isOpen} isOpen={isOpen}
@@ -40,75 +44,76 @@ export const ScheduleSettingsModal = ({ isOpen, handleStart, handleClose, isTask
alignItems: 'flex-start', alignItems: 'flex-start',
marginLeft: '65px', marginLeft: '65px',
}}> }}>
{ isTask <div style={{ display: 'flex', alignItems: 'center', marginBottom: '15px' }}>
? <Typography>Run once every</Typography>
( <TextField
<React.Fragment> type="number"
<Typography sx={{ margin: '20px 0px' }} >Recording parameters:</Typography> value={settings.runEvery}
{ params?.map((item, index) => { onChange={(e) => handleChange('runEvery', parseInt(e.target.value))}
return <TextField style={{ width: '60px', margin: '0 10px' }}
sx={{ marginBottom: '15px' }} />
key={`param-${index}`} <Dropdown
type="string" label="unit"
label={item} id="runEveryUnit"
required value={settings.runEveryUnit}
onChange={(e) => setSettings( handleSelect={(e) => handleChange('runEveryUnit', e.target.value)}
{ >
...settings, <MenuItem value="minutes">minutes</MenuItem>
params: settings.params <MenuItem value="hours">hours</MenuItem>
? { <MenuItem value="days">days</MenuItem>
...settings.params, <MenuItem value="weeks">weeks</MenuItem>
[item]: e.target.value, <MenuItem value="months">months</MenuItem>
} </Dropdown>
: { </div>
[item]: e.target.value,
}, <div style={{ marginBottom: '15px' }}>
})} <Typography>Start from</Typography>
/> <Dropdown
}) } label="start from"
</React.Fragment>) id="startFrom"
: null value={settings.startFrom}
} handleSelect={(e) => handleChange('startFrom', e.target.value)}
<Typography sx={{ margin: '20px 0px' }} >Interpreter settings:</Typography> >
<TextField <MenuItem value="Monday">Monday</MenuItem>
sx={{ marginBottom: '15px' }} <MenuItem value="Tuesday">Tuesday</MenuItem>
type="number" <MenuItem value="Wednesday">Wednesday</MenuItem>
label="maxConcurrency" <MenuItem value="Thursday">Thursday</MenuItem>
required <MenuItem value="Friday">Friday</MenuItem>
onChange={(e) => setSettings( <MenuItem value="Saturday">Saturday</MenuItem>
{ <MenuItem value="Sunday">Sunday</MenuItem>
...settings, </Dropdown>
maxConcurrency: parseInt(e.target.value), </div>
})}
defaultValue={settings.maxConcurrency} <div style={{ marginBottom: '15px' }}>
/> <Typography>At around</Typography>
<TextField <TextField
sx={{ marginBottom: '15px' }} type="time"
type="number" value={settings.atTime}
label="maxRepeats" onChange={(e) => handleChange('atTime', e.target.value)}
required />
onChange={(e) => setSettings( </div>
{
...settings, <div style={{ marginBottom: '15px' }}>
maxRepeats: parseInt(e.target.value), <Typography>Timezone</Typography>
})} <Dropdown
defaultValue={settings.maxRepeats} label="timezone"
/> id="timezone"
<Dropdown value={settings.timezone}
id="debug" handleSelect={(e) => handleChange('timezone', e.target.value)}
label="debug" >
value={settings.debug?.toString()} <MenuItem value="UTC">UTC</MenuItem>
handleSelect={(e) => setSettings( <MenuItem value="America/New_York">America/New_York</MenuItem>
{ <MenuItem value="Europe/London">Europe/London</MenuItem>
...settings, <MenuItem value="Asia/Tokyo">Asia/Tokyo</MenuItem>
debug: e.target.value === "true", <MenuItem value="Asia/Kolkata">Asia/Kolkata</MenuItem>
})} {/* Add more timezone options as needed */}
> </Dropdown>
<MenuItem value="true">true</MenuItem> </div>
<MenuItem value="false">false</MenuItem>
</Dropdown>
<Button onClick={() => handleStart(settings)}>Start</Button> <Button onClick={() => handleStart(settings)}>Start</Button>
</div> </div>
</GenericModal> </GenericModal>
); );
} }
export default ScheduleSettingsModal;