+
+
+
{
+ setTouched((current) => ({ ...current, time: true }));
+ const nextValue = timeRef.current?.value ?? scheduleTimeDefaultValue;
+ const parsed = parseScheduleTimeInput(nextValue, timeFormat);
+ if (!parsed.ok) {
+ setScheduleTimeIsValid(false);
+ return;
+ }
+ const normalized = formatScheduleTimeForInput(parsed.value, timeFormat);
+ if (timeRef.current) {
+ timeRef.current.value = normalized;
+ }
+ setScheduleTimeIsValid(true);
+ }}
+ />
+
+ {timeFormat === "24h" ? "Use 24h format: HH:MM" : "Use 12h format: HH:MM AM/PM"}
+
+ {showFieldError("time") ? (
+
{showFieldError("time")}
+ ) : null}
+
+
+
+
+
+
+
+
+
+
{
+ setTouched((current) => ({ ...current, threshold: true }));
+ const nextValue = thresholdRef.current?.value ?? scheduleThresholdDefaultValue;
+ const parsed = parseThresholdInput(nextValue);
+ if (!parsed.ok) {
+ setScheduleThresholdIsValid(false);
+ return;
+ }
+ if (thresholdRef.current) {
+ thresholdRef.current.value = String(parsed.value);
+ }
+ setScheduleThresholdIsValid(true);
+ }}
+ />
+
+ 0 = immediate dispatch at schedule time. Values above 0 spread per-account runs randomly in that window.
+
+ {showFieldError("threshold") ? (
+
+ {showFieldError("threshold")}
+
+ ) : null}
+
+
+
+
+
+
+
+ Include accounts with paused status in execution. Rate-limited, quota-exceeded, and deactivated accounts are always skipped.
+
+
+
+
+
+
+
+
+
+ {WEEKDAY_OPTIONS.map((option) => {
+ const selected = scheduleDays.includes(option.value);
+ return (
+
+ );
+ })}
+
+
Choose weekdays when this automation should run.
+
+
+