-
Notifications
You must be signed in to change notification settings - Fork 341
Expand file tree
/
Copy pathFrequencyPickerWidget.jsx
More file actions
140 lines (136 loc) · 4.38 KB
/
FrequencyPickerWidget.jsx
File metadata and controls
140 lines (136 loc) · 4.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import {
Box,
FormControl,
InputLabel,
MenuItem,
Select,
TextField,
} from "@mui/material";
import { DatePicker, DateTimePicker } from "@mui/x-date-pickers";
import { AdapterMoment } from "@mui/x-date-pickers/AdapterMoment";
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
import moment from "moment";
export default function FrequencyPickerWidget(props) {
const { onChange, id, value, minStartTime, maxStartTime } = props;
const frequency = value ? JSON.parse(value) : null;
const handleChange = (newValue) => {
onChange(JSON.stringify(newValue));
};
return (
<Box sx={{ display: "flex" }}>
<FormControl sx={{ width: "120px" }}>
<InputLabel id={`${id}-label`}>Frequency</InputLabel>
<Select
labelId={`${id}-label`}
id={id}
label="Frequency"
value={frequency?.type || ""}
onChange={(event) => handleChange({ type: event.target.value })}
placeholder="Select a frequency"
variant="filled"
sx={{ lineHeight: "0.5em" }}
>
<MenuItem value="run_now">Run Now</MenuItem>
<MenuItem value="run_once">Run Once</MenuItem>
<MenuItem value="repeat">Repeat</MenuItem>
<MenuItem value="cron">Cron Job</MenuItem>
</Select>
</FormControl>
{frequency?.type === "run_once" && (
<LocalizationProvider dateAdapter={AdapterMoment}>
<DateTimePicker
minDateTime={minStartTime}
maxDateTime={maxStartTime}
timeSteps={{ minutes: 15 }}
disablePast
value={moment(frequency?.scheduled_time)}
onChange={(value) => {
handleChange({
...frequency,
type: "run_once",
start_date: value.format("YYYY-MM-DD"),
start_time: value.format("HH:mm:ss"),
scheduled_time: value,
});
}}
label="Schedule Time"
/>
</LocalizationProvider>
)}
{frequency?.type === "repeat" && (
<div>
<LocalizationProvider dateAdapter={AdapterMoment}>
<DateTimePicker
minDateTime={minStartTime}
maxDateTime={maxStartTime}
timeSteps={{ minutes: 15 }}
disablePast
value={moment(frequency?.scheduled_time)}
onChange={(value) => {
handleChange({
...frequency,
type: "repeat",
start_date: value.format("YYYY-MM-DD"),
start_time: value.format("HH:mm:ss"),
scheduled_time: value,
});
}}
label="Schedule Start Time"
/>
<TextField
label="Repeat Interval (in days)"
value={frequency?.interval}
type="number"
onChange={(event) =>
handleChange({
...frequency,
type: "repeat",
interval: event.target.value,
})
}
/>
<DatePicker
disablePast
value={moment(frequency?.end_date, "YYYY-MM-DD")}
onChange={(value) => {
handleChange({
...frequency,
type: "repeat",
end_date: value.format("YYYY-MM-DD"),
});
}}
label="Schedule End Date"
/>
</LocalizationProvider>
</div>
)}
{frequency?.type === "cron" && (
<LocalizationProvider dateAdapter={AdapterMoment}>
<TextField
label="Cron Job Expression"
value={frequency?.cron_expression}
onChange={(event) =>
handleChange({
...frequency,
type: "cron",
cron_expression: event.target.value,
})
}
/>
<DatePicker
disablePast
value={moment(frequency?.end_date, "YYYY-MM-DD")}
onChange={(value) => {
handleChange({
...frequency,
type: "cron",
end_date: value.format("YYYY-MM-DD"),
});
}}
label="Schedule End Date"
/>
</LocalizationProvider>
)}
</Box>
);
}