From eee7c3e9f2c5056a88bcc0d72d8ecd31a96435eb Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Thu, 22 Jan 2026 22:53:44 +0100 Subject: [PATCH] Add scheduleOffset to FrequencyDialog.jsx --- .../FrequencyDialog/FrequencyDialog.jsx | 16 +++++- .../components/FrequencyDialog/styles.sass | 54 +++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/client/src/common/components/FrequencyDialog/FrequencyDialog.jsx b/client/src/common/components/FrequencyDialog/FrequencyDialog.jsx index b4bf5447..26ecc517 100644 --- a/client/src/common/components/FrequencyDialog/FrequencyDialog.jsx +++ b/client/src/common/components/FrequencyDialog/FrequencyDialog.jsx @@ -34,6 +34,7 @@ export const FrequencyDialog = ({open, onClose}) => { return preset ? preset.id : "custom"; }); const [customCron, setCustomCron] = useState(config.cron || "0 * * * *"); + const [scheduleOffset, setScheduleOffset] = useState(config.scheduleOffset === "true"); const [showAdvanced, setShowAdvanced] = useState(isCustomPreset); const [saving, setSaving] = useState(false); @@ -47,10 +48,11 @@ export const FrequencyDialog = ({open, onClose}) => { if (!cronValue || !getNextRun(cronValue)) return; setSaving(true); - const res = await patchRequest("/config/cron", {value: cronValue}); + const cronRes = await patchRequest("/config/cron", {value: cronValue}); + const offsetRes = await patchRequest("/config/scheduleOffset", {value: scheduleOffset ? "true" : "false"}); setSaving(false); - if (res.ok) { + if (cronRes.ok && offsetRes.ok) { updateToast(t("dropdown.changes_applied"), "green", faCheck); reloadConfig(); close(); @@ -106,6 +108,16 @@ export const FrequencyDialog = ({open, onClose}) => { {nextRun &&

{t("update.cron_next_test")} {nextRun}

} )} + +
setScheduleOffset(!scheduleOffset)}> +
+
+
+
+

{t("update.schedule_offset")}

+

{t("update.schedule_offset_desc")}

+
+
diff --git a/client/src/common/components/FrequencyDialog/styles.sass b/client/src/common/components/FrequencyDialog/styles.sass index ddb8afde..d5f39313 100644 --- a/client/src/common/components/FrequencyDialog/styles.sass +++ b/client/src/common/components/FrequencyDialog/styles.sass @@ -125,3 +125,57 @@ font-size: 0.85rem color: $subtext text-align: center + +.frequency-option + display: flex + align-items: center + gap: 0.875rem + margin-top: 1rem + padding: 0.875rem 1rem + border-radius: 0.75rem + border: 1px solid $light-gray + cursor: pointer + transition: all 0.15s ease + + &:hover + background-color: $darker-gray + +.frequency-option-text + flex: 1 + + h3 + margin: 0 + font-size: 0.95rem + font-weight: 500 + color: $subtext + + p + margin: 0.15rem 0 0 + font-size: 0.8rem + color: $subtext + opacity: 0.7 + +.frequency-toggle + width: 42px + height: 24px + background-color: $light-gray + border-radius: 12px + position: relative + transition: background-color 0.2s ease + flex-shrink: 0 + +.frequency-toggle-knob + width: 20px + height: 20px + background-color: $white + border-radius: 50% + position: absolute + top: 2px + left: 2px + transition: transform 0.2s ease + +.frequency-toggle-active + background-color: $accent-primary + + .frequency-toggle-knob + transform: translateX(18px)