diff --git a/ui/src/components/OperationPanel.jsx b/ui/src/components/OperationPanel.jsx index ce17a72..b0f8c56 100644 --- a/ui/src/components/OperationPanel.jsx +++ b/ui/src/components/OperationPanel.jsx @@ -806,10 +806,11 @@ export default function OperationPanel({ - {/* Only meaningful when borrowing across time, so it - appears with the segment rather than always. */} - {cloneFrom && ( -
The cells you have selected are what gets copied. Shifting moves every date column, and the season and month diff --git a/ui/src/views/Forecast.jsx b/ui/src/views/Forecast.jsx index 900ce45..d4c38ec 100644 --- a/ui/src/views/Forecast.jsx +++ b/ui/src/views/Forecast.jsx @@ -1241,10 +1241,11 @@ export default function Forecast({ sources = [], sourceId, versions = [], versio } else if (op === 'clone') { const set = Object.fromEntries(Object.entries(cloneSet).filter(([, v]) => v.trim())) body = { ...body, note: cloneNote || undefined, set, scale: parseFloat(cloneScale) || 1 } - if (cloneFrom) { - body.from_logid = Number(cloneFrom) - body.date_offset = cloneOffset.trim() || '0 days' - } + // The offset stands on its own: shifting a selection through time is the + // common case, and it used to be sent only when a segment was named. + if (cloneFrom) body.from_logid = Number(cloneFrom) + const off = cloneOffset.trim() + if (off && off !== '0 days') body.date_offset = off } return body }